๊ฐ๋น์ + Linux + Nginx + Cerbot/SSL์ ํ์ฉํ https ์ค์
์๋ก
๊ฐ๋น์ + Linux + Nginx + Cerbot/SSL์ ํ์ฉํ https ์ค์ ์ ๋ํด ๋ฌธ์ํํ๊ณ ์ ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
ํ๊ฒฝ
- ์น ์๋ฒ: Nginx
- ์ธ์ฆ์ ๋ฐ๊ธ: Cerbot/SSL
- ์ด์์ฒด์ : Amazone Linux
- ๋๋ฉ์ธ ๊ตฌ๋งค: ๊ฐ๋น์
๋ชฉ์ฐจ
- ๋๋ฉ์ธ ๊ตฌ๋งค ๋ฐ ์ค์
- Nginx ์ค์น ๋ฐ ์์
- Cetbot ์ค์น ๋ฐ SSL ๋ฐ๊ธ
- Proxy ์ค์
- ์ธ์ฆ์ ์๋ ๊ฐฑ์ (์ ํ)
1. ๋๋ฉ์ธ ๊ตฌ๋งค
๋จผ์ ๋๋ฉ์ธ์ด ํ์ํฉ๋๋ค. ๋๋ฉ์ธ์ ์ฌ๋๋ค์ด ์ํ๋ ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ์
๋ ฅํ๋ ์ฃผ์๋ฅผ ๋งํฉ๋๋ค. https ์ ์ฉ์ ์์ด์ ๋๋ฉ์ธ์ด ํ์ํ ์ด์ ๋ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ๋ ๋๋ฉ์ธ์ด ์๋๋ผ IP์ผ ๊ฒฝ์ฐ์๋ ์ธ์ฆ์ ๋ฐ๊ธ์ด ์ ํ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
๋๋ฉ์ธ์ ์ป์ ์ ์๋ ์ฌ์ดํธ๋ ๊ต์ฅํ ๋ง์ง๋ง ์ ๋ ๊ทธ์ค ๊ฐ๋น์๋ผ๋ ์ฌ์ดํธ๋ฅผ ์ด์ฉํด์ ๊ตฌ๋งคํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ๋น์ ๋ก๊ทธ์ธ ํ ๊ฒ์์ฐฝ์ ์ํ๋ ๋๋ฉ์ธ์ ์ ๋ ฅํ ๋ค ๊ฒ์์ ๋๋ฆ ๋๋ค.
๊ฐ๊ฒฉ์ ๋ณด์๊ณ ์ํ๋ ๋๋ฉ์ธ์ ์ ํ ํ ๊ตฌ๋งค๊ณผ์ ์ ์งํํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ฐ์ต์ฉ์ด๋ฉด 500์์ด๋ 1900์์ง๋ฆฌ๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒ ๋ฒ ์คํธ์ ๋๋ค.
๋ฑ๋ก ๊ธฐ๊ฐ์ด ๋ํดํธ๋ก 3๋ ์ด ์กํ์๋๋ฐ ํํ 1๋ ์ผ๋ก ์ง์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. 1๋ ๋ง ํ ์ธ๊ฐ๊ฒฉ์ด ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ธ์๋ ๋ฐ๋ก ๊ฑด๋๋ฆฌ์ง ์๊ณ ๊ตฌ๋งค๋ง ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๊ตฌ๋งค ํ 'My๊ฐ๋น์ -> ์๋น์ค ๊ด๋ฆฌ'์ ๊ฐ์๋ฉด ์์ ๊ฐ์ด ๋ณธ์ธ์ด ๋ฐฉ๊ธ ๊ตฌ๋งคํ ๋๋ฉ์ธ์ด ๊ตฌ๋งค ํ๋ก๋ถํฐ 5๋ถ ๋ด์ธ๋ก ๋ํ๋ฉ๋๋ค.
๊ทธ ํ '๊ด๋ฆฌ -> DNS ์ ๋ณด -> DNS ๊ด๋ฆฌ'์ ๋ค์ด๊ฐ์๋ฉด ์์ ๊ฐ์ ๊ด๋ฆฌ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
'์ค์ -> ๋ ์ฝ๋ ์์ '์ ๋๋ฌ์ DNS ๋ ์ฝ๋ ์์ ์ ๋์ด ๋ค ๋ค์๊ณผ ๊ฐ์ ์์์ผ๋ก ์
๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
๊ฐ/์์น ๋ถ๋ถ์ ๋ณธ์ธ์ ์๋ฒ ์์ดํผ๋ฅผ ์
๋ ฅํ๊ณ , ํธ์คํธ๋ www์ @ ๋ ๊ฐ๋ฅผ ์ง์ ํ๋๋ฐ, ์ด๋ ๋๋ฉ์ธ์ www๋ฅผ ๋ถ์์ ๋์ ๋ถ์ด์ง ์์์ ๋ ๋ชจ๋ ๋ค ์ ์ฉ๋๋๋ก ํ๋ ๊ฒ์
๋๋ค.
์ ์ฅ ํ 5๋ถ ๋ด์ธ๋ก ๋ณธ์ธ์ ์๋ฒ ์์ดํผ ๋์ ์ ๋๋ฉ์ธ์ผ๋ก ์ ์ํ๋ฉด ์๋์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
2. Nginx ์ค์น ๋ฐ ์์
๋จผ์ ์ ๋ Amazone Linux ํ๊ฒฝ์์ ์์ ์ ํ๊ณ ์์ต๋๋ค. Ubuntu๋ ์ผ๋ฐ Linux๋ก ์์ ํ์๋ ๋ถ์ ์ค์น๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค. ์ ์ฉ ๊ณผ์ ์ ๋์ผํฉ๋๋ค.
sudo amazon-linux-extras install -y nginx1
2-1) Nginx ์ค์น
๋จผ์ Amazone Linux์์๋ yum์ ํตํ nginx ์ค์น๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด Nginx๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
nginx -v
์ ์์ ์ผ๋ก ์ค์น๊ฐ ๋์๋์ง๋ ์ ๋ฒ์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
2-2) Nginx ์์
์ด์ Nginx์ ์ฐ๋ฆฌ๊ฐ 1๋ฒ์์ ๊ตฌ๋งคํ ๋๋ฉ์ธ์ ์์ฑํด์ผ ํฉ๋๋ค. Nginx์ ์ค์ ํ์ผ๋ค์ ๋ณดํต /etc/nginx/* ์๋์ ์์นํ๊ณ ์์ผ๋ฉฐ, ๋ก๊ทธํ์ผ์ /var/log/nginx/*์ ์์นํ๊ณ ์์ต๋๋ค.
find / -name nginx.conf
๋ง์ฝ ์ค์ ํ์ผ๋ค์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ์์ ๊ฐ์ ๋ช ๋ น์ด๋ก ํ๊ฒฝ ํ์ผ๋ค์ ์ฐพ์ ์ ์์ต๋๋ค.
sudo vi /etc/nginx/nginx.conf
์ ํฌ๊ฐ ์์ ํ ํ์ผ์ nginx.conf ํ์ผ์ ๋๋ค. ์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ด์ด์ค๋๋ค.
nginx.conf ํ์ผ์์ ์์ ํ ๋ถ๋ถ์ ์ ์ด๋ฏธ์ง์ ๋นจ๊ฐ ๋ฐ์ค ๋ถ๋ถ์ธ server_name์ ๋๋ค. ๋ณธ์ธ์ ๋๋ฉ์ธ์ ์ ๋ ฅํ๋ฉด ๋๋๋ฐ server_name ๋๋ฉ์ธ www.๋๋ฉ์ธ; ๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ ๋ ฅํฉ๋๋ค.
3. Cerbot ์ค์น ๋ฐ SSL ๋ฐ๊ธ
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
sudo yum-config-manager --enable epel*
sudo yum install -y certbot python2-certbot-apache
sudo yum install certbot-nginx
์ ๋ช ๋ น์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ์ฌ Certbot์ ์ค์นํ๋๋ก ํฉ๋๋ค.
sudo certbot --nginx
Cerbot์ด ์ค์น๋์๋ค๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ก ํฉ๋๋ค.
2๋ฒ์์ Nginx ์ค์ ํ์ผ์ server_name์ ๋ช
์ํ์ ๊ฒฝ์ฐ ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋๋ฉ์ธ(server_name)์ด ์๋์ผ๋ก ๋งค์นญ์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ํ์ธ์ด ๋์๋ค๋ฉด ์ํฐ๋ฅผ ์
๋ ฅํ์ฌ ์งํํ๋๋ก ํฉ๋๋ค.
๋ง์ฝ Nginx ์ค์ ํ์ผ์์ server_name์ ์ง์ ํด์ฃผ์ง ์์์ ๊ฒฝ์ฐ dkswnkk.shop www.dkswnkk.shop์ ๊ฐ์ ์์์ผ๋ก ์
๋ ฅํ์ฌ ์ง์ ์ง์ ํด์ฃผ๋๋ก ํฉ๋๋ค. (ex: dkswnkk.shop www.dkswnkk.shop)
๊ณ์ํด์ ์ํํ๋ฉด ๋จผ์ ์ด๋ฉ์ผ์ ์ ๋ ฅํ๋ผ๊ณ ๋์ต๋๋ค. ๋ณธ์ธ์ ์ด๋ฉ์ผ์ ์ ๋ ฅํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ค์ Y๋ฅผ ์ ๋ ฅํ์ฌ ๋์ํด์ค๋๋ค.
์ด๋ฉ์ผ ์์ ์ฌ๋ถ๋ ์์ ๋กญ๊ฒ ์ ๋ ฅํ์ฌ ๋ค์์ผ๋ก ๋์ด๊ฐ ์ค๋๋ค.
๊ทธ๋ผ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ง์ฝ ์ซ์ 1๊ณผ 2๋ฅผ ์ ํํ๋ผ๋ ๋ฌธ์ฅ์ด ๋์จ๋ค๋ฉด ํด๋น ๋ฌธ์ฅ์ ๊ธฐ์กด http ์ฐ๊ฒฐ์ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ง๋ฌธ์
๋๋ค.
- 1์ ์ ๋ ฅํ๋ค๋ฉด http ์ฐ๊ฒฐ์ https๋ก ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ์ง ์๋๋ค.
- 2๋ฅผ ์ ๋ ฅํ๋ค๋ฉด http ์ฐ๊ฒฐ์ https๋ก ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
1 ๋๋ 2๋ฅผ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅด๋ฉด, ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๊ณ Nginx๊ฐ ์ฌ์์๋ฉ๋๋ค. ์ดํ ์๋์ผ๋ก ๋ฑ๋ก๋๋ฉฐ, 3๊ฐ์ ๋ค์ ์๋์ผ๋ก ๊ฐฑ์ ๋๋ ์ค์ผ์ค๋ ๋ฑ๋ก๋ฉ๋๋ค.
4. Proxy ์ค์
์ด์ ์ฐ๋ฆฌ๊ฐ ๊ตฌ๋งคํ ๋๋ฉ์ธ์ผ๋ก ์์ํ๋ ์ฃผ์๋ก ์ ๊ทผํ๋ฉด ์ฐ๋ฆฌ์ ์คํ๋ง ์๋ฒ๋ก ์ฐ๊ฒฐ์ ๋ณด๋ด๊ธฐ ์ํด proxy_pass ์ค์ ์ ํด์ค์ผ ํฉ๋๋ค.
sudo vi /etc/nginx/nginx.conf
๋ค์ ์์ ๋ช ๋ น์ด๋ฅผ ํตํด Nginx ์ค์ ํ์ผ์ ์ฐ ๋ค ์๋์ ๊ฐ์ด ์ ๋ ฅ ํ ์ ์ฅํฉ๋๋ค.
location / {
proxy_pass http://localhost:8080; # ์์ ์ springboot app์ด์ฌ์ฉํ๋ ํฌํธ
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
์ด๋ฏธ์ง์ ํ์ดํ ๋ถ๋ถ์ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
sudo service nginx restart
์ด์ ์ ๋ช ๋ น์ด๋ฅผ ํตํด Nginx๋ฅผ ์ฌ ์คํ ํ https://๋ณธ์ธ์ ๋๋ฉ์ธ์ ์ ์ํ๊ฒ ๋๋ฉด https๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ์ด ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ํ http๋ก ์ ์ํด๋ ์๋์ผ๋ก https๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋๋ ๊ฒ๋ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ํน์ ์ ์์ด ๋์ง ์์ผ์๋ ๋ถ๋ค์ ์๋ฒ EC2์ ๋ณด์ ๊ทธ๋ฃน ์ค ์ธ๋ฐ์ด๋์์ 443 ํฌํธ๊ฐ ์ด๋ ค์๋์ง ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค.
5. ์ธ์ฆ์ ์๋ ๊ฐฑ์ (์ ํ)
Cerbot์ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ค ๋ณด๋ ๊ธฐ๋ณธ์ ์ผ๋ก 90์ผ์ ๋ง๋ฃ๊ธฐ๊ฐ์ด ์์ต๋๋ค. ํ์ง๋ง 90์ผ๋ง๋ค ๋งค๋ฒ ์๋ฒ์ ์ ์ํ์ฌ ์๋ก์ด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ cron์ ํตํด ์๋ํํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
sudo vi /etc/crontab
๋จผ์ crontab ํ์ผ์ ์์ ํ์ฌ cron์ ์ง์ ํ๋๋ก ํฉ๋๋ค. ์ ๋ช ๋ น์ด๋ฅผ ํตํด crontab์ ์ฝ๋๋ค.
39 1,13 * * * root certbot renew --no-self-upgrade
์ ๋ด์ฉ์ ์ ๋ ฅ ํ ์ ์ฅํฉ๋๋ค. ์์ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- 39 1,13 * * * : ๋งค์ผ 1์ 39๋ถ, 13์ 39๋ถ์ ์คํํ๋๋ก ํฉ๋๋ค.
- root : ๋ช ๋ น์ด root ๊ถํ์ผ๋ก ์คํํ๋๋ก ํฉ๋๋ค.
- certbot renew --no-self-upgrade : Let's Encrypt ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
renew๋ Certbot์ด ์ด์ ์ ์ป์ ๋ชจ๋ ์ธ์ฆ์๊ฐ ์ ๊ฒํ๊ณ ๋ง๋ฃ ๋ ์ง๊ฐ ๋ค๊ฐ์ค๊ณ ์๋ ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
--no-self-upgrade ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด Certbot์ด ์ฌ์ฉ์์ ๊ฐ์ ์์ด ์์ฒด ์ ๊ทธ๋ ์ด๋ํ์ง ์์ต๋๋ค.
- ์๊ฐ ์ค์ ์ ์์๋ก ์์ฑํ ๊ฒ์ด์ง๋ง, Certbot ๊ฐ๋ฐ์๋ ์ต์ํ ๋งค์ผ ๋ ๋ฒ ๋ช ๋ น์ ์คํํ๋ ๊ฒ์ ์ ์ํ๋ค๊ณ ํฉ๋๋ค.
- ์๊ฐ ์ค์ ์ 90์ผ์ ์์ชฝ์ผ๋ก ์ํ์๋ ๋ ์ง์ ๋ง์ถฐ์ ์์ฑํ์ ๋ ๋๊ฒ ์ต๋๋ค.
- ๋ชจ๋ ์ค์ ์ด ๋๋ฌ๋ค๋ฉด cron์ ์ฌ์คํํ์ฌ ์ ์ฉ์ํค๋๋ก ํฉ๋๋ค.
sudo systemctl restart crond
์ด์ crond๋ฅผ ์ฌ ์์ํ์ฌ ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ๊ฐฑ์ ํ๋๋ก ํฉ๋๋ค.