https방식으로 바꾸고 싶다면 SSL인증서가 필요한데 무료이면서 VULTR에서 소개하고 있던 Let's Encrypt를 사용해 SSL인증서를 발급
받으려고 한다.
Let's Encrypt의 인증서 발급 방식에는 크게 네가지(웹서버, standalone, webroot, dns)가 있는데 Nginx를 사용하고 있고 certbot
을 이용해서 쉽게 이용이 가능하다고 하기 때문에 웹서버 방식
을 사용하려고 한다.
웹 서버용 인증서 설치 툴인 Certbot을 설치
(Ubuntu 18.04 버전이라서 python-certbot-nginx 대신 python30certbot-nginx를 설치하였음.)
(certbot 최신버전을 받고 싶다면 add-apt-repository 방식을 이용해서 설치해야한다.)
$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx
웹 서버 방식을 사용하기위해서는 80번 포트에 대한 설정이 되어있어야 하는데 이전 포스트에서 설정하였기 때문에 따로 설정하지 않았다.
$ sudo certbot --nginx -d example.com -d www.example.com
이메일 주소 입력 -> A -> Y -> 리다이렉트 관련 질문( http -> https로 해주기 위해서 2번을 선택했음 )
발급 후 Nginx 설정파일(myapp.conf)을 참고해보면 cerbot에 의해 수정되어있을 것이다.
(몇 분 기다려도 적용이 안된다싶으면, 직접 conf 파일을 수정해야한다.)
수정된 myapp.conf을 적용하기 위해서
$ service nginx restart
무료이다보니 Let's Encrypt 인증서는 90일 후에 만료
되기 때문에 기간이 만료되기 전에
$ certbot renew
명령어를 사용하여 갱신을 해줘야한다.
실제로 갱신시키지 않고 갱신을 시도했을 때 에러가 발생하는지 안하는지 미리 알아 볼 수 있는 명령어가 존재한다.
$ certbot renew --dry-run
90일 마다 $ certbot renew
명령어를 쳐줘야 하는데 이 작업을 해결해줄 수 있는 방법이 존재한다.
crontab
을 이용하면 되는데 crontab은 스스로 정해둔 명령을 일정 기간마다 실행할 수 있도록 도와준다.
$ crontab -e
해당 명령어를 통해 크론을 생성하고
맨 아래에 해당 코드를 입력한다.
0 0 1 * * certbot renew --renew-hook "sudo service nginx restart"
앞의 숫자는 언제마다 해당 명령어를 사용할 것인가인데 0 0 1 * *를 사용하면 매 달 1일마다 실행한다는 의미이다. 다르게 사용하고 싶다면 아래의 Reference를 참고하면 좋다.
renew-hook은 갱신이 되었을 때, 실행되는 코드로 갱신되고나면 nginx 서버를 재실행해달라는 의미이다.