본문 바로가기

개발일지와 메모사이

[우분투 24.04] Nginx + Let's Encrypt로 SSL 인증서 설치 및 갱신

Nginx 설치

sudo apt update
sudo apt install build-essential libssl-dev nginx

 

 

certbot 설치

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

 

인증서 발급받기

sudo certbot --nginx

위와 같이 하면 nginx 설정을 자동으로 한다.

만약 수동으로 nginx 설정을 변경하고자 한다면 다음과 같이 한다.

sudo certbot certonly --nginx

 

 

인증서 자동갱신

Let's Encrypt 인증서는 90일 단위로 만료되기 때문에 자동갱신이 필요하다.

crontab으로 매달 1일 자동갱신하고 싶다면 sudo crontab -e로 crontab 에디터를 열고, 다음 코드를 마지막 줄에 추가하면 된다.

0 0 1 * * certbot renew --quiet --renew-hook "sudo systemctl reload nginx"

restart 대신 reload를 사용하면 웹서비스 중단 없이 설정값만 변경되고, 만약 변경되는 설정값에 에러가 있다면 종전 설정이 유지된다고 한다.

 

※Webmin 설정 팁

nginx의 리버스 프록시로 Webmin을 사용할 경우 certbot이 자동으로 생성한 설정만으로는 서비스가 정상 작동하지 않을 수 있다.

로그인에 성공해도 프록시 버퍼 크기를 충분히 잡지 않으면 타임아웃되도록 툴들을 사용할 수 없다.

따라서 서버블록 내에 다음과 같이 설정을 추가하는게 좋다.

proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_redirect off;

 

위와 같이 하면 Terminal을 제외한 다른 툴들은 정상 작동한다.

Terminal의 경우 WebSockets 지원 설정을 해주어야 하므로 다음 코드를 추가하면 된다.

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

 

다음은 적용 예시이다.