DevLog ๐ถ
[Infra] AWS ๋ฐฐํฌ ํ ๋๋ฉ์ธ ์ฐ๊ฒฐ ๋ฐ HTTPS ์ ์ฉ, nginx๋ก ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ ์ฉํ๊ธฐ ๋ณธ๋ฌธ
[Infra] AWS ๋ฐฐํฌ ํ ๋๋ฉ์ธ ์ฐ๊ฒฐ ๋ฐ HTTPS ์ ์ฉ, nginx๋ก ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ ์ฉํ๊ธฐ
dolmeng2 2023. 5. 28. 17:56๐ฑ ๋ค์ด๊ฐ๊ธฐ ์
๋ฌด๊ณผ๊ธ์ผ๋ก HTTPS ์ ์ฉ ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณด์๋ค.
์ ์๋๋ก๋ผ๋ฉด ๊ฐ๋น์ + Route53 + ACM or ๊ฐ๋น์ + nginx๋ก๋ง ์งํํ๋ฉด ์ข์๊ฒ ์ง๋ง...
์ฌ๋ฌ ์ ์ฝ์ฌํญ์ผ๋ก ์ธํด์ ์๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ฉ์ธ ์ฐ๊ฒฐ ๋ฐ HTTPS ์ ์ฉ์ ์งํํด๋ณด์๋ค.
๐ก ์ ์ฝ์ฌํญ
- ๋ฌด๋ฃ ๋๋ฉ์ธ ์ฌ์ฉํ๊ธฐ
- ์๋ฒ 1๋๋ก ๊ตฌ์ถํ๊ธฐ (๋์์์ด ๊ณ ํต๋ฐ๋ t4g.micro)
- http ์ ์ ์ https๋ก ๋ฆฌ๋ค์ด๋ ํธ์ํค๊ธฐ
๋์ค์ Route53 + ACM + ELB๋ฅผ ํตํด ๋์ ํ๋ ๊ฒ๋ ํฌ์คํ ์ผ๋ก ์์ฑํด๋ณด๊ณ ์ ํ๋ค. (์ด๋ฒ ๋ฏธ์ ์์๋ ๋ชป ํ์ง๋ง ใ )
๐ฑ ๋๋ฉ์ธ ๊ตฌ์ ํ๊ธฐ
์ฌ์ค ๊ฐ๋น์์์ ๊ตฌ๋งคํ๋ ๋๋ฉ์ธ์ด ์๊ธด ํ์ง๋ง, ํ์ด ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ ๋๋ง์ ๋๋ฉ์ธ์ ์ฌ์ฉํ๊ธฐ๋ ์ข ๊ทธ๋์ ๋ค๋ฅธ ์ฌ์ดํธ๋ฅผ ์ฐพ์๋ณด์๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋ฐ๊ฒฌํ ๊ณณ = ๋ด๋๋ฉ์ธ.ํ๊ตญ!
๊ต์ฅํ ์์ํ๊ฒ ์๊ฒผ์ง๋ง ์๋๋ ๋น ๋ฅด๊ณ , ์ ์ฉํ๋ ๋ฐ์๋ ํฌ๊ฒ ๋ฌด๋ฆฌ๊ฐ ์์ด์ ์ฌ๊ธฐ์ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค.
๋จผ์ ์ผ๋ฐ ๋๋ฉ์ธ ๊ฒ์์ฐฝ์ ๋ฑ๋กํ๊ณ ์ถ์ ๋๋ฉ์ธ์ ๊ฒ์ํ๋ค.
5๋ฒ์ ํ์ฌ ๋ด๊ฐ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฑ๋ก ๋ถ๊ฐ๋ก ๋ฌ๋ค ใ ใ
์ฒ์์ ๊ตฌ์ ํ๋ฉด ์์ ๊ฐ์ด DNS ์ฐ๊ฒฐ์ ํ ์ ์๋๋ฐ, ์ฐ์ A ๋ ์ฝ๋์ AWS ์ธ์คํด์ค์ public IP๋ฅผ ์์ฑํ๋ค.
์ฌ๊ธฐ์ A ๋ ์ฝ๋๋ฅผ ๋ฑ๋กํ๋ค๋ ์๋ฏธ๋, DNS ์๋ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ตฌ๋งคํ ๋๋ฉ์ธ๊ณผ IP๋ฅผ ์ฐ๊ฒฐํ๋ค๋ ์๋ฏธ์ธ๋ฐ,
journey-shop.kro.kr๋ก ๋ธ๋ผ์ฐ์ ์์ ์ ์ํ๋ฉด 12.34.56.78 (IP)๋ก ์ ์ํ ์ ์๋๋ก ๋ง๋ ๋ค๋ ๋ป์ด๋ค.
CNAME์ ์ถํ ์ค์ ํ ์์ ์ด์ง๋ง, ํด๋น ๋๋ฉ์ธ์ ๋ํ ๋ณ์นญ์ ์ง์ ํ๋ค๋ ์๋ฏธ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค.
๋ฑ๋กํ๊ณ journey-shop.kro.kr:8080/admin์ผ๋ก ์ ์ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ๋ฉ์ง ์ฐฝ์ด ๋จ๊ฒ ๋๋ค.
๋ ์ด์ IP ์ฃผ์๋ก ์ ๊ทผํ์ง ์๊ณ , ์ฌ๋์๊ฒ ์ต์ํ ๋๋ฉ์ธ๋ช ์ผ๋ก ์ฌ์ดํธ์ ์ ์์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๐ฑ HTTPS ์ฐ๋ํ๊ธฐ
ํ์ง๋ง, ์์์ ์งํํ ๊ณผ์ ์ IP ๋์ ์ ๋จ์ํ ๋๋ฉ์ธ๋ช ์ ์ฌ์ฉํ์ ๋ฟ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ค์ด๋ฒ์ ์ ์ํ ๋ naver.com:8080๊ณผ ๊ฐ์ด ์ ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ, ํฌํธ ๋ฒํธ ์์ด, https ํ๊ฒฝ์ผ๋ก ์ ์ํ๊ณ ์ถ์ ๊ฒ์ด๋ค.
(๋ํ, ํ๋ก ํธ์๋ ์๋ฒ๊ฐ ๋ฐฐํฌ ์๋ฒ๋ผ๋ฉด https -> http๋ CORS์ ์ํด์ ํต์ ์ด ๋ถ๊ฐ๋ฅํ๋ค ๐ฅฒ)
๊ทธ๋์ ์ด๋ฒ์๋ ๊ฐ๋จํ๊ฒ https๋ฅผ ์ ์ฉํด๋ณด๊ณ ์ ํ๋ค.
https๋ ์ํธํ๋ ํ๋กํ ์ฝ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ๋ ๊ธฐ๊ด์ด ์ ๊ณตํด์ฃผ๋ ์ธ์ฆ์๊ฐ ํ์ํ๋ค.
์ฒ์์๋ certbot์ ์ฌ์ฉํ๋ ค๊ณ ํ์ผ๋... ๋ฌด๋ฃ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ค ๋ณด๋ kro.kr๋ก ์์ฒญ์ด ๋๋ฌด ๋ง์ด ๋ค์ด์์ ๋น์ฅ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๋ง์๋ค.
too many certificates already issued for "kro.kr"
๊ทธ๋์ 1์๊ฐ ์ ๋ ์ฒ์์๋ ๊ธฐ๋ค๋ฆฌ๋ ค๊ณ ํ์ง๋ง, ๋ฐ๋ก ์งํํ๊ณ ์ถ์ด์ ๊ฒฐ๊ตญ ํฌ๊ธฐ...
ํน์ ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์งํํด์ฃผ๋ฉด ๋๋ค.
sudo apt update
# certbot ์ค์น
sudo apt install certbot
# www์ ๊ฒฝ์ฐ ์ ํ์ฌํญ
sudo certbot certonly --standalone -d journey-shop.kro.kr -d www.journey-shop.kro.kr
# ์ธ์ฆ์ ํ์ผ ํ์ธ
sudo ls /etc/letsencrypt/live/journey-shop.kro.kr/
cert.pem chain.pem fullchain.pem privkey.pem
์๋ฌดํผ, ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ SSL for Free์ด๋ผ๋ ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์๋ค.
๊ฐ์ ํ๊ณ ๋์ Domain ์ ๋ ฅํด์ฃผ๊ณ , Validity์ 90์ผ, Auto-Generate CSR์ ์ผ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ ์์ ์ธ ์ฌ๋์ด ๋ด ๋๋ฉ์ธ์ ๋ํด์ ๋ฉ๋๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ journey.kro.kr์ด ์ ๋ง SSL ๋ฐ๊ธ์์ ์์ ๋๋ฉ์ธ์ธ์ง ํ์ธํ๊ธฐ ์ํด 3๊ฐ์ง์ ์ธ์ฆ ๋ฐฉ๋ฒ์ด ์ฃผ์ด์ง๋ค. (๋ฉ์ผ ์ธ์ฆ, DNS, HTTP File upload)
๋ฉ์ผ ์ธ์ฆ์ ๊ฒฝ์ฐ ๋ด๋๋ฉ์ธ.ํ๊ตญ์ ์ฌ์ฉํ๋ค ๋ณด๋ kro.kr์ ์์ ์ฃผ์ ์ด๋ฉ์ผ๋ก ์ ์ก๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์์๋ค.
File upload์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ์ ์คํ๋ง ๋ถํธ ์๋ฒ์ ssl for free์์ ์ง์ ํด์ค ๊ฒฝ๋ก์ ํ์ผ์ ์ ๋ก๋ ํ ๋ฐฐํฌํ์ฌ, ํด๋น url๋ก ์ด ์ฌ์ดํธ๊ฐ GET ์์ฒญ์ ๋ณด๋ด health checking์ ์งํํ๋ ๋ฐฉ์์ธ๋ฐ, ํ๋ก๋์ ์ฝ๋๊ฐ ๋๋ฝํ์ง๋ ๊ฒ ์ซ์ด์ ํจ์คํ์๋ค.
๊ทธ๋์ ๋ง์ง๋ง ๋ฐฉ๋ฒ์ผ๋ก, ์ด ์ฌ์ดํธ์์ ์ง์ ํ CNAME์ ์ฐ๋ฆฌ์ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ์ฌ ์์ ๊ถ์ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ์ฑํํ์๋ค.
์์์ ์ฃผ์ด์ง NAME, Point to๋ฅผ ๊ฐ๊ฐ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๋ค ์งํํ๋ค๋ฉด verify Domain์ ํด๋ฆญํด์ฃผ๊ณ , ์๋์ ๊ฐ์ด ๋ฌธ์ ์๋ค๊ณ ๋ฌ๋ค๋ฉด ์ฑ๊ณต์ด๋ค.
๊ทธ๋ฆฌ๊ณ , Certificate ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํ๋๋ฐ 'Ubuntu'์ผ๋ก ์ค์ ํ ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์๋ค.
๊ทธ๋ฌ๋ฉด 3๊ฐ์ง์ ํ์ผ์ ๋ฐ์ ์ ์๋๋ฐ, ca_bundle.crt, certificate.crt, private.key๋ฅผ ์ป๊ฒ ๋๋ค.
ca_bundle.crt (= chain.pem)
: ์ธ์ฆ ์ฒด์ธ์ด๋ ์ค๊ฐ ์ธ์ฆ ๊ธฐ๊ด์ ์ธ์ฆ์๋ค์ ํฌํจํ๋ค.
์ธ์ฆ ์ฒด์ธ์ ์ธ์ฆ์ ๋ฐ๊ธ ๊ธฐ๊ด์์ ์ต์์ ์ธ์ฆ ๊ธฐ๊ด๊น์ง ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์๋ฒ ์ธ์ฆ์์ ํจ๊ป ์ ์ข ๋๋ CA์ ์ธ์ฆ์ ์ฒด์ธ์ ์๋ฏธํ๋ค. ๋ณดํต ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ์๋ฅผ ๊ฒ์ฆํ ๋ ์ฌ์ฉํ๋ค.
certificate.crt (= fullchain.pem)
: ์๋ฒ์ SSL / TLS ์ธ์ฆ์๋ฅผ ํฌํจํ๋ฉฐ, ์น ์๋ฒ์ ์ค์น๋๋ ์ธ์ฆ์์ด๋ค.
์๋ฒ์ ๊ณต๊ฐํค์ ์๋ฒ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค.
private.key (= privkey.pem)
: ์๋ฒ์ ๊ฐ์ธ ํค๋ฅผ ํฌํจํ๋ฉฐ, ์๋ฒ ์ธก์์ ์ธ์ฆ์์ ๋งค์นญ๋๋ ์ผ์ข ์ ๋น๋ฐ ํค์ด๋ค.
SSL / TLS์ ์๋ณตํธํ์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์ ๋ ธ์ถ๋ผ์๋ ์ ๋๋ค.
ํ์ง๋ง, ์ถํ nginx์์ ์ธ์ฆ์๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด์๋ crt ํ์ผ ํ์์ด ์๋ pem ํค ํ์์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ๋ณํํ๋ ์์ ์ด ํ์ํ๋ค.
openssl x509 -inform PEM -in certificate.crt > certificate.pem
๊ทธ๋์, ์๋ฒ์ ์ธ์ฆ์๋ฅผ openssl์ ํตํด์ pem ํ์์ผ๋ก ๋ณํํด์ฃผ์๋ค.
๋ง์ง๋ง์ผ๋ก ์ธ์ฆ์์ ํค๋ฅผ ๋ด ec2 ์ชฝ์ผ๋ก ์ฎ๊ฒจ๋ณด์.
scp -i {EC2 ์ ์์ ์ํ ํค} certificate.pem ubuntu@{EC2 public IP}:{์ด๋ํ path}
scp -i {EC2 ์ ์์ ์ํ ํค} private.key ubuntu@{EC2 public IP}:{์ด๋ํ path}
์๋ ๊ฒ ํ๋ฉด ์ฌ์ ์ค๋น๋ ์๋ฃ๋๋ค!
๐ฑ Nginx๋ก ๋ฆฌ๋ฒ์ค ํ๋ก์ ์งํํ๊ธฐ
๋ฆฌ๋ฒ์ค ํ๋ก์๋ ์๋ฒ์ ์๋จ์์ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ ์ ํ ์์น๋ก ํฌ์๋ฉ์ํค๋ ๊ฒ์ ๋งํ๋ค.
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ 'nginx'๋ผ๋ ์น๊ตฌ๋ฅผ ์ด์ฉํด์ http๋ก ์จ ์์ฒญ์ https๋ก ๋ฐ๊พธ๋ ์์ ์ ์งํํด๋ณด๊ณ ์ ํ๋ค ๐
sudo apt install nginx
๋จผ์ , nginx๋ฅผ ์ค์นํด์ค๋ค.
sudo ufw enable
sudo ufw status
๊ทธ๋ฆฌ๊ณ , ๋ฐฉํ๋ฒฝ์ ๋ํ ์ค์ ์ ํด์ค์ผ ํ๋๋ฐ, ์ฐ๋ถํฌ๋ ufw ๋ฐฉํ๋ฒฝ์ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์๊ธฐ ๋๋ฌธ์ enable์ ํตํด์ ํ์ฑํ ์์ผ์ค๋ค. ์ด๋ฌ๋ฉด ๋ชจ๋ ํฌํธ๊ฐ ์๋์ ์ผ๋ก ๋งํ๊ฒ ๋๋ค.
status๋ฅผ ํตํด ํ์ฌ ์ด๋ค ํฌํธ๊ฐ ์ด๋ ค์๋์ง ํ์ธํ ์ ์๋ค.
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
๋๋ ๋ค์๊ณผ ๊ฐ์ด ssh, nginx Full (์ฌ์ค ์ด๊ฒ 80์ด๋ 443 ์ด์ด์ฃผ๊ธด ํจ), 80, 443, 8080์ ์ด์ด์ฃผ์๋ค.
sudo systemctl start nginx
sudo systemctl status nginx
๊ทธ๋ฆฌ๊ณ , ์ ๊ฐ๋๋๋์ง ํ์ธํ๊ธฐ ์ํด restart ํ status๋ฅผ ํ์ธํ๋ค.
์๋ฐ ์์ผ๋ก Active๊ฐ ๋ด๋ค๋ฉด ์ฑ๊ณต์ด๋ค.
๋์ค์๋ restart ์ต์ ์ ๋ง์ด ์ฌ์ฉํ ํ ๋ฐ, status๋ก ํญ์ ์ํ๋ฅผ ํจ๊ป ํ์ธํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
๊ทธ๋ฆฌ๊ณ , ์ด์ ํฌ์๋ฉ ์ต์ ์ ์ฃผ๊ธฐ ์ํด์ /etc/nginx/site-enabled๋ก ์ด๋ํ๋ค.
๊ฑฐ๊ธฐ๋ก ๊ฐ๋ฉด 'default'๋ผ๋ ํ์ผ์ด ์์ ํ ๋ฐ, ํด๋น ํ์ผ์ vi๋ก ์์ ํ๋ค.
cd /etc/nginx/site-enabled
sudo vi default
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name journey-shop.kro.kr;
ssl_certificate /home/ubuntu/certificate.pem;
ssl_certificate_key /home/ubuntu/private.key;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
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;
}
}
server {
listen 80;
server_name journey-shop.kro.kr;
return 301 https://$host$request_uri;
}
๋ณด๊ธฐ๋ง ํด๋ ์ด์ง๋ฝ๊ธฐ ๋๋ฌธ์ ํ๋์ฉ ์ชผ๊ฐ์ ํ์ธํด๋ณด์.
๐ฑ Nginx ์ค์ ํ์ผ ๋ถ์ํ๊ธฐ
์ฌ๊ธฐ์ default_server๋ผ๋ ์น๊ตฌ๋ฅผ ํ์ธํ ์ ์๋ค.
nginx์์ ์ด๋ค ํฌํธ๋ก ์์ฒญ์ด ๋ค์ด์์ ๋ ์ง์ ํ server ๋ธ๋ก์ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ฉฐ, ๋ง์ฝ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ์์ฒญ์ ๋ํด ๊ฐ์ฅ ๊ตฌ์ฒด์ ์ธ ์๋ฒ ๋ธ๋ก์ ์ฐพ์ผ๋ ค๊ณ ๋งค์นญ์ ์๋ํ๋ค.
โญ๏ธ ์ฌ๊ธฐ์, ๊ธฐ๋ณธ ์๋ฒ ๋ธ๋ก์ด๋ผ๋ ๊ฑด ์๋ฌด๊ฒ๋ ๋งค์นญ๋์ง ์์ ๋ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
1. ์์ฒญํ ํธ์คํธ ์ด๋ฆ๊ณผ ์ผ์นํ๋ server_name ์ง์๋ฌธ์ด ์๋ ์๋ฒ ๋ธ๋ก ์ง์
2. ์์ฒญ๋ ํธ์คํธ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ์์ผ๋์นด๋ server_name ์ง์๋ฌธ์ด ์๋ ์๋ฒ ๋ธ๋ก ์ง์
3. ๊ธฐ๋ณธ ์๋ฒ ๋ธ๋ก (default_server)
์๋ฅผ ๋ค์ด์, journey-shop.kro.kr์ผ๋ก ์์ฒญ์ด ๋ค์ด์จ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋งค์นญ๋๋ค.
server {
listen 80;
server_name *.journey-shop.kro.kr;
}
server {
listen 80;
server_name *.journey-shop.kro.kr;
}
server {
listen 80 default_server;
}
์ด๋ ๊ฒ 3๊ฐ์ ์๋ฒ ๋ธ๋ก์ด ์๋ค๋ฉด ๊ฐ์ฅ ๊ตฌ์ฒด์ ์ธ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ด ์ ํ๋ ๊ฒ์ด๋ฉฐ, ๋ง์ฝ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ด ์๋ชป๋์๋ค๋ฉด ๋ ๋ฒ์งธ ๋ธ๋ก์ผ๋ก, ๋ ๋ฒ์งธ ๋ธ๋ก๋ ์๋ชป๋์๋ค๋ฉด default_server๋ก ์ค์ ๋์ด ์๋ ์ธ ๋ฒ์งธ ๋ธ๋ก์ด ์ ํ๋๋ค.
์ฌ์ค ์ด ๋ถ๋ถ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋ถ๋ถ์ ๋ณ๋๋ก ๊ฑด๋ค์ง ์์๋ค.
root์ ๊ฒฝ์ฐ ์ ์ ํ์ผ์ ๋ํ ๊ธฐ๋ณธ ๊ฒฝ๋ก์ด๊ธฐ ๋๋ฌธ์, journey-shop.kro.kr/index.html ์์ฒญ์ด ๋ค์ด์จ๋ค๋ฉด /var/www/html/index.html์์ ํ์ผ์ ์ฐพ๊ฒ ๋๋ค.
index์ ๊ฒฝ์ฐ, request์ ์๋ฌด ํ์ผ๋ ์ง์ ํ์ง ์์ ์ํ๋ก ์์ฒญ์ด ๋ค์ด์จ๋ค๋ฉด /var/www/html/index, /var/www/html/index.html, /var/www/html/index.htm, /var/www/html/index.nginx-debian.html ํ์ผ์ ์์๋๋ก ์ฐพ์ผ๋ฉฐ ๋ฐํํ๋ค.
server_name์๋ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ง์ ํ ์ ์๋ค.
# 2๊ฐ์ ๋๋ฉ์ธ์ ๋ํด์ ์ฒ๋ฆฌ
server_name journey-shop.kro.kr www.journey-shop.kro.kr
# .journey-shop.kro.kr๊ณผ ๋์ผํ๋ค. ์๋ธ๋๋ฉ์ธ์ ๋ํ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
server_name *.journey-shop.kro.kr
# ํน์ ์ด๋ฆ์ผ๋ก ์์ํ๋ ๋๋ฉ์ธ์ ๋ํ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
server_name journey-shop.kro.kr.*
์ฐธ๊ณ ๋ก, nginx์ ๊ฒฝ์ฐ ๋จ์ํ HTTP ํค๋์ ์๋ ์ด๋ฆ์ ํตํด ์์ฒญ์ ์๋ตํ๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ ์ด๋ฆ์ด ์ ํจํ์ง๋ ์ ์ ์๋ค.
๊ทธ๋์ ์ ํจํ์ง ์์ ๋๋ฉ์ธ ์ด๋ฆ์ server_name์ ์ง์ ํ ์๋ ์๋ค. (๋ฌผ๋ก ์๋ฌ ํ์ด์ง๋ก ๊ฐ๊ฒ ์ง๋ง?)
์๊น crt๋ฅผ ํตํด ๋ณด๋๋ ์ธ์ฆ์์ ํค๋ฅผ ์ฌ๊ธฐ์์ ์ง์ ํด์ค๋ค.
๊ฐ์ฅ ๋ง์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ ์๋ฒ์์ ์ง์ ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ ํ๋ค๋ ์๋ฏธ์ด๋ฉฐ, off๋ก ์ค์ ํ๋ฉด ์ธ๋ถ์์ ์ฝํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋งํ๋ฉด ํค๋ ๊ฒ ์ข๋ค.
์ฐธ๊ณ ๋ก, ssl_protocols์ ํตํด ํ๋กํ ์ฝ์ ์ง์ ํ๊ฑฐ๋ ssl_ciphers๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ ์ง์ ๋ ๊ฐ๋ฅํ๋ค.
์ฌ๊ธฐ์ proxy_pass๋ฅผ ํตํด http, https๋ก ๋ค์ด์จ ์์ฒญ์ ๋ํด์ ์ฐ๋ฆฌ๊ฐ ์คํ๋ง๋ถํธ๋ฅผ ๋์ด 8080์ผ๋ก ํฌ์๋ฉ๋๋๋ก ์ค์ ํ์๋ค.
์ฆ, ๋ฐฑ์๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ํธ์คํธ ์ด๋ฆ์ด ์กฐ๊ธ ํท๊ฐ๋ ธ์๋๋ฐ, ์ฌ์ฉ์๊ฐ journey-shop.kro.kr์ ์ ์ํ์ ๋ ๋จ๋ http ํค๋์ host ๊ฐ = journey-shop.kro.kr์ ํ๋ก์ ํค๋๋ก ์ง์ ํด์ฃผ๋ ๊ฒ์ด์๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋๋ก ์์ฒญ์ ๋ณด๋๋์ง ๊ธฐ๋กํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ฐ์ฅ ๋ง์ง๋ง ๋ธ๋ก์ด๋ค!
์์์ ์ค๋ช ํ๋ ๊ฒ์ฒ๋ผ journey-shop.kro.kr๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๊ฐ์ฅ ๊ตฌ์ฒด์ ์ธ server_name์ด ์ง์ ๋ ์ด ๋ธ๋ก์ด ๋งค์นญ๋๋ค.
๋๋ http ์์ฒญ์ ๋ชจ๋ https๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ํค๊ธฐ ์ํด์ ์์ ๊ฐ์ด ๋ง๋ค์ด์ฃผ์๋ค.
host์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์์ Host ํค๋ ๊ฐ์ ์๋ฏธํ๋ฉฐ, request_uri๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ URI์ด๋ค.
nginx์์ ์๋์ผ๋ก ์ค์ ํด์ฃผ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์ฌ์ ์ํ ํ์๋ ์๋ค.
๐ก ์ฐธ๊ณ ๋ก, URI์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ ํฌํจํ๋ค.
ex) https://journey-shop.kro.kr/products?name='์นํจ'
host: https://journey-shop.kro.kr
request_uri: journey-shop.kro.kr/products?name='์นํจ'
๋ค ๋๋ฌ๋ค! ์ด์ ๋ธ๋ผ์ฐ์ ์์ journey-shop.kro.kr/admin๋ก ๋ค์ด๊ฐ๋ฉด ๋ฐ๋ก https๋ก ๋๋ผ์ด๋ ํธ๋๋ค!
์ฌ์ค ์บ ํผ์ค์์ ์ผ์ด์ผ ํ๋๋ฐ...
๋ค ๋ชป ์จ์ ๋ค๋ฆ๊ฒ ๊ธฐ์ต์ ์์กดํ์ฌ ์์ฑํ์๋ค ๐
์บ ํผ์ค ๋ฑ๊ตํ๋ฉด www๋ ์ถ๊ฐํด์ผ๊ฒ ๋ค ^^...