Backend&Devops/Nginx

[Nginx] SSL 설정(HTTPS 적용)

기은P 2022. 6. 15. 08:58
반응형

1. 개요

기존에 웹 사이트를 HTTP로 운영하고 있다가, 사용자의 정보같은 민감한 정보를 사용하게 될 경우에는 SSL 인증서를 사용한 보안처리를 해야합니다.

웹서버에 SSL 인증서를 사용해 웹사이트를 HTTPS로 열 수 있게끔 Nginx 프록시 서버에 SSL 인증서를 적용하는 방법을 확인해보겠습니다.

 

 

2. 준비물

도메인, SSL 인증서(chain key, private key)

도메인은 유료로도 발급할 수 있지만, 저는 개발용이기 때문에 무료로 도메인을 발급해주는 no-ip라는 사이트를 통해서 받았습니다.

https://www.noip.com/

 

Sign In - No-IP

× Please select your Language To view website content in your Language, please select an option below.

www.noip.com

또한 SSL 인증서 발급도 유료가 아닌 무료로 할 수 있는데, Lets Encrypt라는 인증기관을 통해서 certbot 도구로 SSL인증서를 발급받을 수 있습니다.

https://letsencrypt.org/ko/

 

Let's Encrypt - 무료 SSL/TLS 인증서

 

letsencrypt.org

https://certbot.eff.org/

 

Certbot

Tagline

certbot.eff.org

 

 

 

3. nginx.conf

worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;

    # 443 포트로 접근시 ssl을 적용한 뒤 3000포트로 요청을 전달해주도록 하는 설정.
    server {
            server_name idu-market.shop;

            location / {
                    proxy_pass http://127.0.0.1:3000;
            }

            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/idu-market.shop/fullchain.pem; # managed by Cert>
            ssl_certificate_key /etc/letsencrypt/live/idu-market.shop/privkey.pem; # managed by Ce>

            include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    }

    # 80 포트로 접근시 443 포트로 리다이렉트 시켜주는 설정
    server {
             return 301 https://$host$request_uri;
             # managed by Certbot


            listen 80;
            server_name idu-market.shop;
            return 404; # managed by Certbot
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
}

1) server 80 블록

nginx를 사용할 때 기존에 80포트(http)로 접근되는 요청을 proxy_pass에 특정 웹서버(:3000)로 연결시켰다면,

SSL을 사용할 때는 443포트(https)로 연결시키도록

 return 301 https://$host$request_uri

를 작성해주는 것이 포인트입니다

 

2) server 443 블록

443포트는 https 요청에 연결되는 포트로, proxy_pass에 특정 웹서버(:3000)로 리다이렉트 해주는 부분을 명시해주면 됩니다.

여기서 중요한 포인트는 ssl certificate 부분입니다.

앞서 준비한 도메인과 연결된 SSL 인증서의 chain key, private key를 nginx가 설치된 서버의 특정 폴더에 저장하고, 

        ssl_certificate /경로/fullchain.pem;
        ssl_certificate_key /경로/privkey.pem;

그 키가 위치한 폴더의 경로를 작성해주시면 됩니다.

443으로 들어오는 요청을 SSL 인증서로 암호화 하겠다는 의미입니다.

 

 

 

 

참고 사이트

https://gist.github.com/woorim960/dda0bc85599f61a025bb8ac471dfaf7a

 

Nginx를 이용하여 https 적용하는 법

Nginx를 이용하여 https 적용하는 법. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

반응형