Infra/linux
nginx에 무료 ssl 자동 갱신 명령어 묶음 (feat. let's encrypt)
하우아유두잉
2024. 3. 8. 14:38
OS 환경은 ubuntu이다.
SSL 적용
1. letsencrypt 설치
$ sudo apt update
$ sudo apt-get install letsencrypt -y
2. root 계정 전환 -> nginx 정지
$ sudo su -
$ cd /root
$ sudo service nginx stop
3. 인증서 생성
-d 뒤에 본인의 도메인을 입력하면된다. (서브도메인이 있는 경우 뒤에 개수만큼 추가하면 됨)
인증시 email을 입력하고 모두 'Y'를 한다.
성공시 축하 메시지가 나온다.
$ sudo certbot certonly --standalone -d mydomain.com -d www.mydomain.com -d test.mydomain.com
4. 파일을 확인한다.
파일 위치 :
/etc/letsencrypt/live/mydomain.com/
/etc/letsencrypt/live/www.mydomain.com/
/etc/letsencrypt/live/test.mydomain.com/
5. nginx 재시작
$ sudo service nginx restart
6. nginx conf에 ssl 설정을 해준다.
파일 위치 : /etc/nginx/sites-available/default
도메인 수만큼 server {}를 추가하면 된다.
나머지 2개는 생략 하겠다.
나의 경우 https(433)으로 들어온 요청을 :3000 포트로 전달한다.
server {
# SSL configuration
#
listen 443 ssl http2;
listen [::]:443 ssl http2 ;
client_max_body_size 50M;
ssl_certificate "/etc/letsencrypt/live/mydomain.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/mydomain.com/privkey.pem";
ssl_dhparam "/etc/nginx/ssl/dhparams.pem";
server_name mydomain.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:3000;
}
}
만약 /etc/nginx/ssl/dhparams.pem이 없다면 아래 명령어로 만들어 주자.
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparams.pem 2048
7. 끝으로 nginx를 다시 재시작 한다.
$ sudo service nginx restart
문제가 없다면 정상적으로 적용된 것이다.
SSL 자동 갱신
1. 쉘 스크립트 파일 생성
$ cd /bin
$ sudo nano letsencrypt.sh
#!/bin/sh
sudo service nginx stop
sudo certbot renew > /home/pi/Desktop/le_renew.log
fuser -k 80/tcp
sudo service nginx start
2. 실행 권한 부여
$ sudo chmod +x letsencrypt.sh
3. 크론탭 오픈
$ sudo crontab -e
4. 배치잡 추가
ssl 기한이 90일이기 때문에 90일마다 실행되도록 해준다.
0 0 */90 * * letsencrypt.sh
5. cron 재실행
$ sudo service cron restart