Nginx, Let’s Encrypt SSL 인증서 발급

Deagwon Bu·2021년 9월 21일
0

prerequired

https 인증서를 발급하기에 앞서 다음 과정이 선행되어야 합니다.

  • 80번 포트 외부 접속 허용
  • 443번 포트 외부 접속 허용
  • 본인 소유 도메인 발급

Nginx 설치

# 설치
$ sudo apt-get install -y nginx nginx-common nginx-full
# 삭제
#$ sudo apt-get purge --auto-remove -y nginx nginx-common nginx-full

Setup NGINX

# default파일 수정
$ sudo vim /etc/nginx/site-enabled/default

(nginx에서는 site-abaliable을 수정한 후 symbolic link을 연결하는 것을 권장합니다.)

well-known 접근 설정

다음과 같이 /.well-known/acme-challenge/으로 요청이 들어올 때 응답을 정의합니다.

  • 80번 포트 접근 허용
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name {domain-name};

        location ~ /\.well-known/acme-challenge/ {
           allow all;
           root /var/www/letsencrypt;
        }
}

Nginx 실행

파일을 저장하고, 새롭게 정의한 defualt 파일이 문제가 없는지 확인 한 후, nginx를 시작합니다.

sudo nginx -t # 테스트
sudo service nginx start # 실행

Setup SSL

자 이제 본격적으로 인증서를 발급하겠습니다.

# let's encrypt 설치
$ sudo apt update
$ sudo apt install certbot python3-certbot-nginx
$ sudo mkdir /var/www/letsencrypt
# 인증서 발급
$ sudo certbot certonly --webroot -w /var/www/letsencrypt -d {도메인} --agree-tos -m {이메일}

인증서가 정상적으로 발급되었다면 다음 경로에서 발급된 인증서를 확인하실 수 있습니다.

# 생성된 인증서 확인
$ sudo ls /etc/letsencrypt/live/{도메인}
>>> README  cert.pem  chain.pem  fullchain.pem  privkey.pem

Setup Nginx

이제 인증서경로를 연결하여 443 포트를 설정해 봅시다.

# default파일 수정
$ sudo vim /etc/nginx/site-avaliable/default

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name {domain-name};

        location ~ /\.well-known/acme-challenge/ {
           allow all;
           root /var/www/letsencrypt;
        }
}

server {
        listen  443 ssl;
        server_name 도메인;

        #access_log /var/log/nginx/proxy/access.log;
        #error_log /var/log/nginx/proxy/error.log;
        
        ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;

        location / {

		//https 포트로 서비스할 html 경로를 설정합니다.
                //proxy_pass를 통해서 내부에 열린 다른 port로 연결 할 수도 있습니다.
                
                root /build폴더 경로/build;
                index  index.html index.htm;
                try_files $uri $uri/ /index.html;

		// or

		proxy_pass http://127.0.0.1:8000;
				
        }
}

Nginx 실행

sudo nginx -t # 테스트
sudo service nginx restart # 실행

로그 확인

tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

인증서 자동 갱신

sudo crontab -e

# 3개월 마다 인증서를 자동 갱신
15 3 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"

1개의 댓글

comment-user-thumbnail
2022년 3월 26일

도움이 많이 되었습니다! 우연하게 검색하다가 블로그로 보니 반갑네요!^^ 그 때의 미숙했던 두 후배들은 직장인이 되었습니다. 많이 이끌어주시고 진로상담도 열정적으로 해주셔서 감사했습니다! 블로그 번창하세요!

답글 달기