๋ชฉ์ฐจ
- ํฌํธ ๋ฒํธ ์์ด ์ ์ํ๊ณ ์ถ๋ค๋ฉด
- ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ๋ฌด์์ธ๊ฐ?
- ๋ฆฌ๋ฒ์ค ํ๋ก์๊ฐ ํ์ํ ์ด์
- Nginx ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ํ๊ธฐ
- ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋๋ฉ์ธ์ผ๋ก ๋ถ๊ธฐํ๋ ๋ฐฉ๋ฒ
- ๋ฆฌ๋ฒ์ค ํ๋ก์์ HTTPS ์ ์ฉํ๊ธฐ
- ์์ฃผ ๋ฐ์ํ๋ ์ค๋ฅ์ ํด๊ฒฐ๋ฒ
- ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
1. ํฌํธ ๋ฒํธ ์์ด ์ ์ํ๊ณ ์ถ๋ค๋ฉด
Node.js๋ก ๋ง๋ ์น ์ฑ์ ์๋ฒ์ ์ฌ๋ฆฌ๋ฉด ๋ณดํต 3000๋ฒ ํฌํธ์์ ์คํ๋ฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์ํ๋ ค๋ฉด myblog.com:3000์ฒ๋ผ ํฌํธ ๋ฒํธ๋ฅผ ์ง์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ค์ ์๋น์ค์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ ธ์ถํ๋ ๊ฒ์ ๋ณด๊ธฐ์๋ ์ข์ง ์๊ณ ๋ณด์์์ผ๋ก๋ ์ข์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๊ทธ๋ฅ myblog.com๋ง ์ ๋ ฅํด๋ ์ ์ํ ์ ์๊ฒ ํ๋ ค๋ฉด ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ์ด ํ์ํฉ๋๋ค.
2. ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ๋ฌด์์ธ๊ฐ?
**๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy)**๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ๋ด๋ถ ์๋ฒ๋ก ์ ๋ฌํ๊ณ , ์๋ต์ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ฃผ๋ ์ค๊ฐ ์๋ฒ์ ๋๋ค.
์ฌ์ด ๋น์ ๋ก ์ค๋ช ํ๋ฉด, ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํ์ฌ ์๋ด ๋ฐ์คํฌ์ ๊ฐ์ต๋๋ค. ์ธ๋ถ ๋ฐฉ๋ฌธ๊ฐ(์ฌ์ฉ์)์ด ํ์ฌ(์๋ฒ)์ ์ค๋ฉด ์๋ด ๋ฐ์คํฌ(Nginx)๊ฐ ๋จผ์ ๋ง์ดํ๊ณ , ๋ฐฉ๋ฌธ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ ๋ถ์(์ค์ ์ฑ ์๋ฒ)๋ก ์๋ดํด ์ค๋๋ค. ๋ฐฉ๋ฌธ๊ฐ์ ์ด๋ ๋ถ์๋ก ์ฐ๊ฒฐ๋๋์ง ์ ํ์๊ฐ ์์ต๋๋ค.
ํฌ์๋ ํ๋ก์์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ๊ฐ๋จํ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ์์น | ํด๋ผ์ด์ธํธ ์ | ์๋ฒ ์ |
| ์ญํ | ํด๋ผ์ด์ธํธ ๋์ ์์ฒญ | ์๋ฒ ๋์ ์๋ต |
| ๋ํ ์ฉ๋ | VPN, ์ต๋ช ์ฑ ๋ณดํธ | ๋ก๋๋ฐธ๋ฐ์ฑ, ํฌํธ ์จ๊ธฐ๊ธฐ |
3. ๋ฆฌ๋ฒ์ค ํ๋ก์๊ฐ ํ์ํ ์ด์
ํฌํธ ๋ฒํธ ์จ๊ธฐ๊ธฐ: ์ฌ์ฉ์์๊ฒ 3000, 8080 ๊ฐ์ ํฌํธ ๋ฒํธ๋ฅผ ๋ ธ์ถํ์ง ์๊ณ 80, 443 ํฌํธ๋ก๋ง ์ ์ํ๊ฒ ํ ์ ์์ต๋๋ค.
HTTPS ์ผ๊ด ์ ์ฉ: Nginx ์๋จ์์ SSL ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๋ด๋ถ ์ฑ์ HTTP๋ก ํต์ ํ๋๋ผ๋ ์ฌ์ฉ์์๊ฒ๋ HTTPS๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ๋์ ์๋ฒ์์ ์ฌ๋ฌ ์๋น์ค ์ด์: ํฌํธ๋ ์๋ธ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ ๋ถ๊ธฐํด ์ฌ๋ฌ ์ฑ์ ํ๋์ ์๋ฒ์์ ์ด์ํ ์ ์์ต๋๋ค.
๋ณด์ ๊ฐํ: ์ค์ ์ฑ ์๋ฒ์ ์กด์ฌ๋ฅผ ์จ๊ธฐ๊ณ Nginx๊ฐ ๋จผ์ ์์ฒญ์ ํํฐ๋งํฉ๋๋ค.
4. Nginx ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ํ๊ธฐ
Node.js ์ฑ์ด 3000๋ฒ ํฌํธ์์ ์คํ ์ค์ด๋ผ๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. myblog.com์ผ๋ก ์ ์ํ๋ฉด ์ด ์ฑ์ผ๋ก ์ฐ๊ฒฐ๋๋๋ก ์ค์ ํฉ๋๋ค.
๋จผ์ Nginx ์ฌ์ดํธ ์ค์ ํ์ผ์ ๋ง๋ญ๋๋ค.
sudo nano /etc/nginx/sites-available/myblog
ํธ์ง๊ธฐ๊ฐ ์ด๋ฆฌ๋ฉด ์๋ ์ค์ ๋ด์ฉ์ ์ ๋ ฅํฉ๋๋ค. server_name์๋ ๋ณธ์ธ์ ๋๋ฉ์ธ์ ์ ๋ ฅํ๊ณ , proxy_pass์๋ ์ฑ์ด ์คํ ์ค์ธ ๋ด๋ถ ํฌํธ๋ฅผ ์ง์ ํฉ๋๋ค.
server {
listen 80;
server_name myblog.com www.myblog.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
์ค์ ํ์ผ์ sites-enabled์ ์ฐ๊ฒฐํด ํ์ฑํํฉ๋๋ค.
sudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/
์ค์ ํ์ผ ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์๋์ง ๊ฒ์ฌํฉ๋๋ค.
sudo nginx -t
์ด์์ด ์์ผ๋ฉด Nginx์ ์ค์ ์ ๋ฐ์ํฉ๋๋ค.
sudo systemctl reload nginx
์ด์ myblog.com์ผ๋ก ์ ์ํ๋ฉด ํฌํธ ๋ฒํธ ์์ด Node.js ์ฑ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
5. ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋๋ฉ์ธ์ผ๋ก ๋ถ๊ธฐํ๋ ๋ฐฉ๋ฒ
ํ๋์ ์๋ฒ์์ ์ฌ๋ฌ ์ฑ์ ์ด์ํ ๋, ์๋ธ๋๋ฉ์ธ์ผ๋ก ๊ฐ ์๋น์ค๋ฅผ ๋ถ๊ธฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด blog.myblog.com์ 3000๋ฒ ํฌํธ ์ฑ์ผ๋ก, api.myblog.com์ 4000๋ฒ ํฌํธ ์ฑ์ผ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
blog.myblog.com ์ค์ ํ์ผ์ ๋ง๋ญ๋๋ค.
sudo nano /etc/nginx/sites-available/blog
์๋ ์ค์ ์ ์ ๋ ฅํฉ๋๋ค.
server {
listen 80;
server_name blog.myblog.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
api.myblog.com ์ค์ ํ์ผ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ง๋ค๊ณ , proxy_pass ์ฃผ์๋ง http://localhost:4000์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ฐ ์ค์ ํ์ผ์ sites-enabled์ ์ฐ๊ฒฐํ๊ณ Nginx๋ฅผ ์ฌ์์ํ๋ฉด ๋ฉ๋๋ค.
6. ๋ฆฌ๋ฒ์ค ํ๋ก์์ HTTPS ์ ์ฉํ๊ธฐ
๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ํ Certbot์ผ๋ก HTTPS๋ฅผ ์ ์ฉํ๋ฉด ์๋์ผ๋ก 80๋ฒ ์ค์ ์ 443์ผ๋ก ์ ํํด ์ค๋๋ค.
sudo certbot --nginx -d myblog.com -d www.myblog.com
Certbot์ด Nginx ์ค์ ํ์ผ์ ์๋์ผ๋ก ์์ ํ๊ณ SSL ์ธ์ฆ์๋ฅผ ์ ์ฉํฉ๋๋ค. ์ดํ http://๋ก ์ ์ํ๋ฉด ์๋์ผ๋ก https://๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ฉ๋๋ค.
7. ์์ฃผ ๋ฐ์ํ๋ ์ค๋ฅ์ ํด๊ฒฐ๋ฒ
502 Bad Gateway ์ค๋ฅ Nginx๊ฐ ์ฐ๊ฒฐํ๋ ค๋ ๋ด๋ถ ์ฑ(localhost:3000)์ด ์คํ๋์ง ์๊ณ ์์ ๋ ๋ฐ์ํฉ๋๋ค. Node.js ์ฑ์ด ์ ์์ ์ผ๋ก ์คํ ์ค์ธ์ง ๋จผ์ ํ์ธํฉ๋๋ค.
์ค์ ํ์ผ ์ ์ฉ์ด ์ ๋ ๋ sites-available์ ํ์ผ์ ๋ง๋ค์์ด๋ sites-enabled์ ๋งํฌ๋ฅผ ๊ฑธ์ง ์์ผ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค. ln -s ๋ช ๋ น์ผ๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์๋์ง ํ์ธํฉ๋๋ค.
Permission denied ์ค๋ฅ Nginx๊ฐ ๋ด๋ถ ์์ผ ํ์ผ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ฑ์ด ์ ๋์ค ์์ผ์ ์ฌ์ฉํ๋ค๋ฉด ํ์ผ ๊ถํ์ ํ์ธํฉ๋๋ค.
8. ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
์ค๋ ๋ฐฐ์ด ํต์ฌ์ ์ ๋ฆฌํฉ๋๋ค.
- ๋ฆฌ๋ฒ์ค ํ๋ก์๋ Nginx๊ฐ ์ธ๋ถ ์์ฒญ์ ๋ฐ์ ๋ด๋ถ ์ฑ ์๋ฒ๋ก ์ ๋ฌํ๋ ๊ตฌ์กฐ์ ๋๋ค.
- proxy_pass ์ค์ ์ผ๋ก ํน์ ๋๋ฉ์ธ ์์ฒญ์ ๋ด๋ถ ํฌํธ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- ์๋ธ๋๋ฉ์ธ๋ณ๋ก ์ค์ ํ์ผ์ ๋ง๋ค์ด ์ฌ๋ฌ ์๋น์ค๋ฅผ ํ๋์ ์๋ฒ์์ ์ด์ํ ์ ์์ต๋๋ค.
- Certbot๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด HTTPS๊น์ง ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
๋ค์ ๊ธ์์๋ ๋ฆฌ๋ ์ค ํ์ผ ๊ถํ(chmod, chown) ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.