1. 개요
기존에 웹 사이트를 HTTP로 운영하고 있다가, 사용자의 정보같은 민감한 정보를 사용하게 될 경우에는 SSL 인증서를 사용한 보안처리를 해야합니다.
웹서버에 SSL 인증서를 사용해 웹사이트를 HTTPS로 열 수 있게끔 Nginx 프록시 서버에 SSL 인증서를 적용하는 방법을 확인해보겠습니다.
2. 준비물
도메인, SSL 인증서(chain key, private key)
도메인은 유료로도 발급할 수 있지만, 저는 개발용이기 때문에 무료로 도메인을 발급해주는 no-ip라는 사이트를 통해서 받았습니다.
또한 SSL 인증서 발급도 유료가 아닌 무료로 할 수 있는데, Lets Encrypt라는 인증기관을 통해서 certbot 도구로 SSL인증서를 발급받을 수 있습니다.
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
'Backend&Devops > Nginx' 카테고리의 다른 글
[Nginx] Nginx Proxy Manager 설치 (2) | 2022.06.17 |
---|---|
[OpenSSL] SSL 인증서 발급 방법 요약 (1) | 2022.06.09 |
[Nginx] 리버스 프록시(Reverse Proxy) 개념 및 사용법 (2) | 2022.06.03 |
[Nginx] connect() failed (111: Connection refused) while connecting to upstream 오류 해결 (2) | 2022.06.03 |
[Nginx] Nginx 개념 및 nginx.conf 설정 (0) | 2022.01.06 |