๐ [Nginx, Certbot] ์๋ธ๋๋ฉ์ธ์ SSL ์ธ์ฆ์ ๋ฐ๊ธ ํ https ์ค์ ํ๊ธฐ
์ ๋ฒ๋ฌ์ ํฌํธํด๋ฆฌ์ค ์ฉ๋๋ก ์ฌ์ฉํ ๋๋ฉ์ธ์ ํ๋ ๊ตฌ๋งคํ์์ต๋๋ค.
์ด๋ฒ์ ์๋ก์ด ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ Nexus Docker Repository๋ฅผ ์ค์นํ๋๋ฐ, ์๋ธ ๋๋ฉ์ธ์ SSL ์ธ์ฆ์๋ฅผ ์ ์ฉํด https๋ก ํต์ ํ๋๋ก ํ์ต๋๋ค.
์ด๊ฒ ์์ฃผ ํ ์ ์๋ ์์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ธ๋ฐฉ ๊ธฐ์ต์์ ์ง์์ง ๊ฒ ๊ฐ์ ๊ธฐ๋กํด ๋ด ๋๋ค.
๐ CNAME ๋ ์ฝ๋ ์ค์
CNAME์ ํ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ค๋ฅธ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ณ์นญ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ํฉ๋๋ค.
์ ๋ฅผ ์๋ก ๋ค๋ฉด "lasbe.kr"์ด๋ ๋๋ฉ์ธ์ ๊ตฌ๋งคํ๊ณ , docker repository ํต์ ์ ์ํด CNAME ๋ ์ฝ๋๋ฅผ "docker"๋ก ์ค์ ํ์ผ๋ฉด ์ต์ข ์ ์ผ๋ก "docker.lasbe.kr"๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ํธ์คํ ์ผ์ด์์ด๋ผ๋ ๋๋ฉ์ธ ์ ์ฒด์์ CNAME์ ์์ ๊ฐ์ด ์ค์ ํด ์ฃผ์์ต๋๋ค.
๐ CNAME ๋ ์ฝ๋ ํ์ธ
https://ultahost.com/ko/domain-dns-lookup
$ nslookup
๋ช
๋ น์ด๋ ์ ์นํ์ด์ง๋ฅผ ํตํด CNAME์ด ์ ์ ์ฉ๋์๋ ํ์ธํด ์ค๋๋ค.
certbot์ 5๋ฒ ์คํํ๋ฉด 1์๊ฐ์ ๊ธฐ๋ค๋ ค์ผ ๋๊ธฐ ๋๋ฌธ์ ๊ผญ ์ ์ ์ฉ๋์๋ ํ์ธ ๋จผ์ ํด์ฃผ๋๋ก ํฉ๋๋ค.
๐ SSL ์ธ์ฆ์ ๋ฐ๊ธ
๊ธฐ์กด ๋๋ฉ์ธ์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์๋ค๋ ์ ์ ํ์ ์ค๋ช ํฉ๋๋ค.
๋ง์ฝ ๊ธฐ์กด ๋๋ฉ์ธ์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๋ฐ์ง ์์๋ค๋ฉด ์๋ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
Proxy Server์ Certbot์ผ๋ก SSL ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐ๊ณ Https ์ ์ฉํ๊ธฐ
๐ ๊ธฐ์กด ์ธ์ฆ์ ํ์ธ
$ certbot certificates
์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ๊ธฐ์กด์ ๋ฐ๊ธ๋ฐ์๋ ์ธ์ฆ์๋ฅผ ํ์ธํด ์ค๋๋ค.
๐ ์ธ์ฆ์ ์ ๋ฐ์ดํธ
$ certbot certonly --cert-name <์ธ์ฆ์ ์ด๋ฆ> -d <๋๋ฉ์ธ1> -d <๋๋ฉ์ธ2> ...
$ certbot certonly --cert-name lasbe.kr -d docker.lasbe.kr -d lasbe.kr
๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์์ ๊ฐ์ ์ ํ์ฌํญ์ด ๋์ค๋๋ฐ, ์ ๊ฐ์ ๊ฒฝ์ฐ nginx๋ฅผ ํตํด ์งํํ๊ธฐ ๋๋ฌธ์ 1๋ฒ์ ์ ํํ๊ณ ๋ฐ๊ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ Nginx ์ค์ ํ์ผ ์ถ๊ฐ
/etc/nginx/conf.d/default.conf
ํ์ผ์ ์์ ํ์ฌ ์ธ์ฆ์๋ฅผ ์ ์ฉํด ์ฃผ๊ฒ ์ต๋๋ค.
๐ ์๋ฒ ๋ธ๋ก ์ถ๊ฐ
server {
server_name docker.lasbe.kr;
location / {
proxy_pass http://192.168.0.8:5000;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/lasbe.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/lasbe.kr/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
}
๊ธฐ์กด ์ค์ ํ์ผ์ ์์ ๊ฐ์ด ์๋ฒ ๋ธ๋ก์ ์ถ๊ฐํ์ฌ ์๋ธ ๋๋ฉ์ธ์ผ๋ก ๋ค์ด์จ ์์ฒญ์ ๋ผ์ฐํ ํด์ค๋๋ค.
443 ํฌํธ listen๊ณผ ์ธ์ฆ์ ๋ถ๋ถ์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด ๋ฉ๋๋ค.
๐ http -> https
server {
listen 80;
server_name *.lasbe.kr lasbe.kr;
return 301 https://$host$request_uri;
}
http๋ก ๋ค์ด์จ ์์ฒญ์ https๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ ๊ฒ์ ๊ฐ ๋๋ฉ์ธ๋ง๋ค ์ฒ๋ฆฌํ๊ธด ํ๋๋, ์ ์๋ฒ ๋ธ๋ก์ ํตํด http๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ผ๊ด์ ์ผ๋ก https ๋ฆฌ๋ค์ด๋ ํธ ์ฒ๋ฆฌํด ์ค๋๋ค.
๐ ์ ์ฒด ์ค์ ํ์ผ
server {
listen 80;
server_name *.lasbe.kr lasbe.kr;
return 301 https://$host$request_uri;
}
server {
server_name lasbe.kr;
location / {
proxy_pass http://192.168.0.8:3000;
}
location /.well-known/acme-challenge/ {
allow all;
root /var/www/certbot;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/lasbe.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/lasbe.kr/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 {
server_name docker.lasbe.kr;
location / {
proxy_pass http://192.168.0.8:5000;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/lasbe.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/lasbe.kr/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
}
์ค์ ๋์๊ฐ๊ณ ์๋ Nginx ์๋ฒ ์ค์ ํ์ผ์ ์ผ๋ถ๋ ์์ ๊ฐ์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
๐ ์ค์ ํ์ผ ๋ฐ์
$ sudo nginx -t
$ sudo service nginx reload
Nginx ํ ์คํธ ํ ์ ์์ด๋ผ๋ฉด ๋ฐ์ํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
๋๊ธ