이번 포스팅은 letsencrypt로 https 인증서를 받고 nginx를 받아서 자동으로 https로 리다이렉트가 되도록 설정하는 시간을 가질겁니다.
우선 ec2 인스턴스에 연결하셔서 nginx를 받을겁니다.
sudo apt-get install nginx
이 명령어를 치시면 알아서 nginx가 받아질겁니다.
그 다음은 certbot-auto라고 letsencrypt를 통해 https 인증서를 받도록 해주는 프로그램을 다운 받습니다.
wget https://dl.eff.org/certbot-auto
를 통해서 받으시고
chmod a+x certbot-auto
이 명령어로 실행할 수 있도록 권한을 설정해줍시다.
./certbot-auto를 하면 이제 인증서를 받는 과정을 실행하게 될텐데 그 전에 미리 nginx 설정을 해주면 훨씬 편합니다.
vim /etc/nginx/nginx.conf로 nginx.conf 파일을 설정해줄텐데
쭉 내리다보면
include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/&;
이 보일텐데 이 밑에 이 설정을 추가해줍시다.
server {
server_name 여러분의.도메인;
listen 80;
location / {
proxy_set_header HOST $host;
proxy_pass http://127.0.0.1:3060;
proxy_redirect off;
}
}
이 설정을 한 다음 ./certbot-auto를 실행시킵니다.
y를 누르다보면 여러분의 도메인을 나올텐데 방금 전 nginx.conf 설정을 해주셨기 때문에 도메인이 나오는겁니다.
도메인을 선택하시면 알아서 인증서를 받을텐데 다시 nginx.conf로 가면 certbot이 알아서 내용을 추가시켜줬을 겁니다.
server {
server_name 여러분의.도메인 www.여러분의.도메인;
location / {
proxy_set_header HOST $host;
proxy_pass http://127.0.0.1:쓰고있는포트번호;
proxy_redirect off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate / etc / letsencrypt / live / 여러분의.도메인 / fullchain.pem; # managed by Certbot
ssl_certificate_key / etc / letsencrypt / live / 여러분의.도메인 / privkey.pem; # managed by Certbot
include / etc / letsencrypt / options - ssl - nginx.conf; # managed by Certbot
ssl_dhparam / etc / letsencrypt / ssl - dhparams.pem; # managed by Certbot}
server {
if($host = www.여러분의.도메인) {
return 301 https://여러분의.도메인$request_uri;
}
server_name www.여러분의.도메인;
listen 80;
return 404;
}
server {
if($host = 여러분의.도메인) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name 여러분의.도메인;
listen 80;
return 404; # managed by Certbot
}
}
위에 server 내용은 비슷할겁니다. 그러나 저기에 "www.여러분의.도메인"이 있는 이유는 www.여러분의.도메인으로 입력해서 들어올 때 자동으로 "여러분의.도메인"으로 들어오게 하기 위해서입니다.
만약 이 기능이 필요없으시다면 www.여러분의.도메인을 지우고 해당 server 부분을 지우시면 됩니다.
참고로 프론트와 백엔드간에 쿠키 공유가 있으시다면 백엔드 nginx 설정의 proxy_set_header 부분 밑에 proxy_set_header X-Forwarded-Proto $scheme;을 추가해줍시다.
server {
server_name 여러분의.도메인 www.여러분의.도메인;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:여러분이쓰고있는포트번호;
proxy_redirect off;
}
}
그리고 nginx.conf를 수정할 때마다
sudo systemctl restart nginx
를 해주셔야 수정한게 반영이 됩니다. 이렇게 해주시면 이제 끝납니다.
만약 nginx가 실행이 안되시면 nginx.conf 수정할 때 오타를 내셨거나 80번 포트를 이미 사용한 경우입니다.
sudo lsof -i tcp:80 이 명령어로 80번 포트가 사용되어있는지 확인하시고 nginx가 아닌 다른 게 있다면
sudo kill -9 종료시킬pid
이 명령어를 입력해줍시다.
이렇게 다 해주시면 여러분은 nginx로 https 리다이렉트하기를 완료하신겁니다. 다음 포스팅은 aws ec2서버가 아닌 heroku로 배포하는 법에 대해 쓸 것 같습니다.