nginx로 https 리다이렉트하기

강보석·2021년 8월 5일
0

✨소개

이번 포스팅은 letsencrypt로 https 인증서를 받고 nginx를 받아서 자동으로 https로 리다이렉트가 되도록 설정하는 시간을 가질겁니다.

✨세팅하기

🎐Nginx 다운

우선 ec2 인스턴스에 연결하셔서 nginx를 받을겁니다.

sudo apt-get install nginx

이 명령어를 치시면 알아서 nginx가 받아질겁니다.

🎐LetsEncrypt 다운

그 다음은 certbot-auto라고 letsencrypt를 통해 https 인증서를 받도록 해주는 프로그램을 다운 받습니다.

wget https://dl.eff.org/certbot-auto

를 통해서 받으시고

chmod a+x certbot-auto

이 명령어로 실행할 수 있도록 권한을 설정해줍시다.

./certbot-auto를 하면 이제 인증서를 받는 과정을 실행하게 될텐데 그 전에 미리 nginx 설정을 해주면 훨씬 편합니다.

🎐LetsEncrypt 설정

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이 알아서 내용을 추가시켜줬을 겁니다.

🎉www에서 non-www 설정하기

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로 배포하는 법에 대해 쓸 것 같습니다.

profile
안녕하세요. 컴퓨터를 공부하는 학생입니다.

0개의 댓글