๊ฐ์
- HTTP๋ฅผ ์ ์ฉํ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ AWS EC2์ ์ฌ๋ ค์ ธ ์๋ค.
- Nginx๋ฅผ ์ฌ์ฉํด HTTPS ์ค์ ์ ํ๋ค. (ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด Nginx๊ฐ ์๋ฒ ์๋จ์์ ์์ฒญ์ ๋์ ๋ฐ์์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋๊ฒจ์ค๋ค. - ์ด๋ฅผ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ผ ํ๋ค)
Nginx ์ค์ ํ๊ธฐ
Nginx ์ค์น
# ์ค์น 1 (redhat ๊ณ์ด. ex. Amazon linux 2)
sudo yum clean metadata
sudo yum -y install nginx
# ๋ง์ฝ ํจํค์ง๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ๋์ค๋ฉด ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์.
sudo amazon-linux-extras enable nginx1
# ์ค์น 2 (debian ๊ณ์ด. ex. Ubuntu)
sudo apt-get install nginx
Nginx ์ค์ ํ์ผ ์์ ํ๊ธฐ
์ค์นํ๊ณ ๋๋ฉด /etc/nginx
๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋๋ค. nginx์ ๋ฃจํธ ์ค์ ํ์ผ์ /etc/nginx/nginx.conf
์ธ๋ฐ, ๋ณดํต ํด๋น ํ์ผ์ ์ง์ ์์ ํ์ง ์๊ณ , ์ฌ๋ฌ ํ์ ์ค์ ํ์ผ์ ๋๊ณ ์ด ํ์ผ์์ ๋ชจ๋์ฒ๋ผ ๋ก๋ฉํด์ ์ฌ์ฉํ๋ค. (์ฝ๋์์ ์ค๋ณต ์ ๊ฑฐํ๋ ๊ฒ ์ฒ๋ผ) nginx.conf ํ์ผ์ ๋ณด๋ฉด ์๋ include /etc/nginx/conf.d/*.conf
์ฝ๋๊ฐ ์ค์ ์ ๋ก๋ฉํด์จ๋ค.
https ์ค์ ์ ์ํด์ conf.d
ํด๋ ํ์์ default.conf
๊ฐ์ ์๋ก์ด ์ค์ ํ์ผ์ ์์ฑํ๊ณ ์๋์ ๊ฐ์ด ์์ฑํ์.
server {
listen 443 ssl;
server_name <๋๋ฉ์ธ ์ด๋ฆ>
location / {
proxy_pass http://127.0.0.1:<์น์๋ฒ๊ฐ ์ฌ์ฉํ๋ ํฌํธ>;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
# ์๋ ๋ถ๋ถ์ Let's encrypt๋ฅผ ํตํด SSL ์ธ์ฆ์ ๋ฐ์ ํค๋ฅผ ์ฌ์ฉํ๋ค.
ssl_certificate /etc/letsencrypt/live/<SSL ๋ฐ๊ธ๋ฐ์ ๋๋ฉ์ธ ์ด๋ฆ>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<SSL ๋ฐ๊ธ๋ฐ์ ๋๋ฉ์ธ ์ด๋ฆ>/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
# http๋ก ๋ค์ด์จ ์์ฒญ์ https๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋๋๋ก ์ค์ ํ๋ค.
server {
listen 80;
location / {
return 301 <๋๋ฉ์ธ ์ด๋ฆ>$request_uri;
}
}
Nginx ์คํ, ๋ก๋ฉ ๋ช ๋ น์ด
์ค์ ์ด ์๋ฃ๋๋ฉด nginx๋ฅผ ์คํ์์ผ์ค๋ค.
sudo service nginx start # nginx ์๋ฒ ์คํํ๊ธฐ
sudo service nginx reload # ์ค์ ํ์ผ์ ์์ ํ๋ค๋ฉด ์ค์ ํ์ผ์ ๋ก๋ฉํด์จ๋ค.
SSL ์ธ์ฆ์ ๋ฐ๊ธํ๊ธฐ
nginx์์ ์ฌ์ฉํ๊ธฐ ์ํ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด๋ณด์. ์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์น์ฌ์ดํธ๋ค์ CA๋ผ๋ ๋ฃจํธ ์ธ์ฆ๊ธฐ๊ด์์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด์ฃผ๋๋ฐ, ์ง์ ๋ฐ๊ธํ๋ ค๋ฉด Let's encrypt
๋ก ๋ฐ๊ธํ ์ ์๋ค(๋๋ฅผ ๋ด๊ฐ ์ธ์ฆํ๋ ์).
๋๋ฉ์ธ ๊ตฌ๋งค
์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ค๋ฉด ๋๋ฉ์ธ์ด ๋ฌด์กฐ๊ฑด ์์ด์ผ ํ๋ค. IP๋ง์ผ๋ก๋ ์ค์ ํ ์ ์๋ค.
AWS์์ ์ ๊ณตํ๋ public domain์ ์ฐ๋ฉด ์๋ ๊น? ์ถ์ง๋ง, AWS ๋๋ฉ์ธ์ ์ฌ์ค ์์๋ก ๋ถ์ฌํ๋ ๊ฒ๋ค์ด๋ผ ๋ณด์ ์ํ์ด ํฌ๊ธฐ ๋๋ฌธ์ ์ ์ด์ LetsEncrypt์์ ๋ง์๋์๋ค.
๋๋ฉ์ธ์ ๊ตฌ๋งคํ ์ ์๋ ์ฌ์ดํธ์์ ์ ๋ ดํ๊ฒ ๋๋ฉ์ธ์ ๊ตฌ๋งคํ๊ฑฐ๋, ๋ฌด๋ฃ๋ก ๋๋ฉ์ธ์ ์ฌ์ฉํ ์ ์๋ ์ฌ์ดํธ์์ ๋ฐ๊ธํ์.
Certbot ์ค์น
Letโs encrypt์์ ์ถ์ฒํ๋ ๋ฐฉ์์ธ Certbot์ ์ฌ์ฉํ๋ฉด SSL ์ธ์ฆ์๋ฅผ ์ฝ๊ฒ ๋ฐ๊ธํ ์ ์๋ค.
sudo yum install certbot
sudo yum install python-certbot-nginx # nginx์ฉ ํ๋ฌ๊ทธ์ธ ์ค์น
Letโs Encrypt๋ก SSL ๋ฐ๊ธํ๊ธฐ
sudo certbot --nginx -d <๋๋ฉ์ธ ์ด๋ฆ>
์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ๋๋ฉด /etc/letsencrypt/live/
ํ์์ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ ํด๋๊ฐ ํ๋ ์๊ธฐ๊ณ , SSL ์ธ์ฆ์ ์ํ ํ์ผ๋ค์ด ๋ง๋ค์ด์ง๋ค.
์ด ํ์ผ ๊ฒฝ๋ก๋ฅผ nginx์ ์ค์ ํ์ผ์ ์ ๋ ฅํด์ฃผ๊ณ , nginx ์ค์ ์ ๋ฆฌ๋ก๋ํด์ค๋ฉด ๋ชจ๋ ์ค์ ์ด ๋๋๋ค.
์ธ์ฆ์ ๊ฐฑ์ ์๋ํํ๊ธฐ
Letโs Encrypt๋ 90์ผ ๋ง๋ค ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ง์ ์ฃผ๊ธฐ๋ง๋ค ๊ฐฑ์ ์ ํด์ฃผ๋ ๊ฒ์ ๋ถํธํ๋ฏ๋ก ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํด์ ์๋ํํด๋ณด์. linux์๋ crontab
์ด๋ผ๋ ์ค์ผ์ค๋ฌ๊ฐ ์์ผ๋ฏ๋ก crontab
์ ์ฌ์ฉํ๋ค.
์๋ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ํธ์ง๊ธฐ๋ฅผ ์คํํ์.
crontab -e # ์ค์ผ์ค๋ฌ ํธ์ง๊ธฐ ์คํ
๊ทธ๋ฆฌ๊ณ ํธ์ง๊ธฐ์ ๋งค์ 1์ผ 0์ 0๋ถ์ certbot renew
๋ก ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํ๋ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ณ ์ ์ฅํ๋ฉด ์ค์ผ์ค๋ฌ ๋ฑ๋ก์ด ๋๋๋ค.
0 0 1 * * certbot renew --renew-hook "sudo service nginx reload"