본문 바로가기

현재

Nginx에 SSL 적용(crontab 인증서 자동갱신 포함)

아래글 "wsl(windows subsystem for linux)에 pm2 설치 및 환경설정"은 비단 wsl에만 해당되지 않으므로 ubuntu와 같은 linux환경에서 이어서 web서버를 설정한다

package를 통한 nginx 설치

$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.14.0 (Ubuntu) 
// 시작
$ sudo service nginx start
$ sudo systemctl start nginx
$ sudo /etc/init.d/nginx start

// 재시작
$ sudo service nginx restart
$ sudo systemctl restart nginx
$ sudo /etc/init.d/nginx restart

// 중지
$ sudo service nginx stop
$ sudo systemctl stop nginx
$ sudo /etc/init.d/nginx stop

// 상태
$ sudo service nginx status
$ sudo systemctl status nginx

// 설정 reload
$ sudo service nginx reload
$ sudo systemctl reload nginx
$ sudo nginx -s reload

// configuration file syntax check
$ sudo nginx -t

설정파일 경로

package(apt-get을 통한 설치)의 경우 : /etc/nginx에 위치
* 직접 compile한 경우 : /usr/local/nginx/conf, /usr/local/etc/nginx

Ubuntu 18.04에서 Let's Encrypt Nginx에 SSL 적용

1. Certbot 설치

레포지토리 추가

$ sudo add-apt-repository ppa:certbot/certbot

Certbot Repository 추가

apt 를 사용하여 Certbot의 Nginx 패키지를 설치

$ sudo apt install python-certbot-nginx

2. nginx 설정 확인

SSL을 자동으로 적용시키기 위해서는 Certbot이 서버 블록에서 확실한 정보를 찾을 수 있어야 하며 특히 SSL의 경우, server_name 에서 감지하여 요청하는 방식 

도메인에 대한 서버 블록이 /etc/nginx/sites-available/flow-ers.ai 에 대한 서버 블록의 server_name 구문 설정

$ sudo vi /etc/nginx/sites-available/flow-ers.ai

server_name api.flow-ers.ai;

파일 구문이 정상확인

$ sudo nginx -t

오류발생시 변경후 리로드
$ sudo system reload nginx

파일구문 체크

3. 방화벽을 통해 https 허용

현재 방화벽 설정 확인(우분투 방화벽 - UFW)

$ sudo ufw status

방화벽 상태확인 후 enable 설정

UFW는 기본 비활성화 상태이기에 이를 활성화

참고 : https://webdir.tistory.com/206

Nginx Full 프로파일을 허용

$ sudo ufw allow 'Nginx Full' 
$ sudo ufw allow 'OpenSSH' 

4. SSL 인증서 가져오기

Certbot은 다양한 웹 서버에 대하여 SSL 인증서를 얻을 수 있는 플러그인을 제공. Nginx 플러그인은 필요할 때마다 자동적으로 Nginx를 재구성하고, 구성을 다시 로드하는 작업을 담당. Nginx 플러그인을 사용하기 위해 입력

$ sudo certbot --nginx -d api.flow-ers.ai

nginx 플러그인이 적용된 certbot  -d 인자 우측에 있는 도메인들을 유효하게 만드는 설정

설치
리뉴얼 또는 보안 공지를 위한 메일주소
인증서 만료일을 알려준다

공개키 저장소, 비밀키 저장소, 인증서는 설치가 완료된 이후 90일 까지 유효, 90일 전에 certbot을 다시 실행해 인증서를 갱신하세요. (역자 주 : 자세한 내용은 5단계 - Certbot 자동 갱신 시키기 를 참고) 

/etc/letsencrypt 에 인증서 저장 개인 키와 공개 키를 안전한 장소에 보관

5. SSL 자동으로 갱신시키기

Let's Encrypt의 인증서는 90일 동안 유효. 인증서를 자주 갱신시키는 것 권장. certbot 패키지를 설치하여 자동화. /etc/cron.d 내의 스크립트는 하루 두번씩 실행되어 만료일까지 30일 이내의 모든 인증서를 자동 갱신

갱신 절차를 테스트

$ sudo certbot renew --dry-run

6. 자동갱신 CronTab 등록 및 조회

* 편집
crontab -e

* 목록 조회
crontab -l

* 삭제
crontab -r

* 주기 설정
* * * * *  (분, 시, 일, 월, 요일)
crontab -e (편집)후 위와 같이 * 표시가 있는 곳에 실행이 되길 원하는 시각 기재
왼쪽에서부터 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7) 순서대로 입력합니다.
0과 7 = 일요일
1 = 월요일
6 = 토요일

CronTab 조회 (매월 15일 새벽 3시 갱신)