์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- K๋ฐฐํฐ๋ฆฌ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ฑ
- ๋ฐฐ์์ ๋ฐฐ์
- ๋ผํ๋ผ์ค์๋ง๋
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์๋ฐ
- html
- database
- JavaScript
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๊ฐ๋ฐ
- Java
- ์ฝ๋ฉ
- ์นํผ๋ธ๋ฆฌ์ฑ
- Python
- ๋ ์
- ์ค๋ธ์
- ํ๋ก๊ทธ๋๋ฐ
- ComputerScience
- ๋ฐ์ํ
- ์ํ์ฃผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ํ
- ํ์ด์ฌ
- css
- ์ค๋ผํด
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฆฌ์กํธ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- Today
- Total
JiYoung Dev ๐ฅ
Nginx๋ก Reverse Proxy ์ค์ ํ๊ธฐ ๋ณธ๋ฌธ
๐ ๋ฌธ์ ์ํฉ
์ ์ํ ์ฐธ์ฌ๋ฅผ ์ํด ์ฌ๋ด ์๋ฒ(Private๋ง)์ ๊ตฌ์ถ๋์ด ์๋ ์๋ฃจ์ ์ ์ธ๋ถ๋ง์์๋ ์ ๊ทผํ ์ ์๋๋ก ๋คํธ์ํฌ ์ค์ ์ ๋ณ๊ฒฝํ๋ ์ผ์ด ์์๋ค. ๋ผ์ฐํ ์ ํ๋์ง ์๋ ํฌํธํฌ์๋ฉ์ ํ๋์ง๋ ํ์คํ์ง ์์ง๋ง(์๋ง๋ ํฌํธํฌ์๋ฉ?) ์ด์จ๋ ๊ฒฐ๋ก ์ ์ฌ๋ด๋ง IP๋ก ์ ์ํ ์ ์๋ ๊ฒ์ ์ธ๋ถ๋ง์์๋ ์ ์์ด ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์ธ๋ถ๋ง์์ ์ ์ํ ์ ์๋๋ก ๋ณ๊ฒฝํ๋ฉด์ ๋ฆฌ์กํธ ์ฑ์ด ์ฐ๊ณ๋ API ์๋ฒ์ ์ฐ๋์ด ์๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ํ์ฌ ์ฐ๋ฆฌ ์๋ฃจ์ ์ ์ํคํ ์ฒ๋ ์ฝ๊ฐ ๋ ํนํ๊ฒ ๊ตฌ์ฑ๋์ด ์๋๋ฐ CSR์ธ ๋ฆฌ์กํธ๋ฅผ Node.js ์๋ฒ ์์ ์ฌ๋ฆฌ๊ณ , ๋ฆฌ์กํธ์์ Node.js, Spring Server ๋ฐ python Server์ ํต์ ํ๋ ๊ตฌ์กฐ์ด๋ค.
๋ฆฌ์กํธ ์ฑ์์ ๊ฐ ์๋ฒ๋ก ์ ์กํ๋ API URL์ ์ฌ๋ด๋ง ์๋ฒ์ IP๋ก ์ฐ๋์ ํด ๋์๋๋ฐ, ๋ฆฌ์กํธ๊ฐ ์ธ๋ถ๋ง์์ ๋์ํ๋ค ๋ณด๋ ์ฌ๋ด๋ง์ผ๋ก ์ ๊ทผ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ์๋ค.
์ธ๋ถ๋ง์์ ๋ฆฌ์กํธ ์ฑ์ด ๋ก๋ ๋์์ ๋์๋ ๋ฆฌ์กํธ ์ฑ์ด ํด๋ผ์ด์ธํธ ์ธก์์ ์คํ๋๋ฏ๋ก, ๋ด๋ถ๋ง์ผ๋ก ์ง์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. (์ธ๋ถ๋งIP๋ฅผ ํตํด ๋ด๋ถ๋งIP๋ก์ ์ฐ๊ฒฐ์ ์ค์ ํ๋๋ผ๋, ์ค์ ๋คํธ์ํฌ๋ ๊ฒฉ๋ฆฌ๋ ์ํ)
๋ฐ๋ผ์ ์ธ๋ถ๋ง IP๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ๋๋ก ๋ง๋ค์ด์ผ ํ๊ณ , ์ด๋ฅผ ์ํด Reverse Proxy ์ค์ ์ ํตํด ๋ด๋ถ๋ง์ผ๋ก ์์ฒญ์ด ๋ค์ด์ฌ ์ ์๋๋ก ํ๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Nginx๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ(์ธ๋ถ๋ง)์์ ๋ค์ด์ค๋ ์์ฒญ์ Nginx๋ฅผ ๊ฑฐ์ณ ์๋ฒ์ ์ ๋ฌ์ด ๋๋๋ก ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ์๋ค.
๐ ํด๊ฒฐ๋ฐฉ์
โ Reverse Proxy๋
Reverse Proxy๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์ ๋ฐ์ ๋ด๋ถ ์๋ฒ๋ก ์ ๋ฌํด์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฅผ ๋ค์ด /api/spring ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ ์์ฒญ๋ค์ Nginx์ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ์ ํตํด ์คํ๋ง ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , /api/python ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ ์์ฒญ์ ํ์ด์ฌ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๋ฑ์ ์์ ์ ํ๋ค.
โ Nginx Reverse Proxy ์ค์
# nginx์ ๊ธฐ๋ณธ server ๋ธ๋ก ์ค์
# /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
}
location /api {
proxy_pass http://127.0.0.1:5000;
}
}
Nginx ์ค์ ์ ์์ ๊ฐ์ด ํ๊ฒ ๋๋ฉด localhost์ 80ํฌํธ๋ฅผ nginx๊ฐ ๋ณด๊ณ ์์ด, localhost์ 80 ํฌํธ๋ก ์ ์ํ๋ฉด nginx๋ก ์ ์ํ๊ฒ ๋๊ณ localhost:80/ ๊ฒฝ๋ก๋ก ์ ์ํ ๋์๋ 8080 ํฌํธ๋ก ์์ฒญ์ด ์ ๋ฌ๋๊ณ , localhost:80/api ๊ฒฝ๋ก๋ก ์ ์ํ๋ฉด 5000 ํฌํธ๋ก ์์ฒญ์ด ์ ๋ฌ๋๋ค.
์ค์ ๋ก๋ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ์ด ๊ฐ๋ฅํ๋๋ก ์๋์ ๊ฐ์ด ์ค์ ์ ์์ฑํ์๋ค.
api ํน์ ai์ผ ๊ฒฝ์ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด location์ ์์น๋ฅผ /api, /ai ๋ค์ /๋ก ์ค์ ํ์๋ค.
server {
listen 5000;
server_name ์ฌ๋ด๋งIP;
location /api {
proxy_pass http://์ฌ๋ด๋งIP:3000/api;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 10M;
}
location /ai {
proxy_pass http://์ฌ๋ด๋งIP:8010/ai;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 10M;
}
location / {
proxy_pass http://์ฌ๋ด๋งIP:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 10M;
}
}
๐ ์ ์ฉ ํ CORS ์๋ฌ ๋ฐ์!
์์ ๊ฐ์ด Nginx ์ค์น ๋ฐ ์ค์ ํ Spring Server๋จ์์ CORS ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
์์ธ์ Spring Server์์ Cors๊ฐ ์ฌ๋ด๋งIP๋ก๋ง ์ค์ ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฒฐ๊ตญ ์ธ๋ถ๋ง์์ ๋ค์ด์ค๋ ์์ฒญ์ ์ธ๋ถ๋ง IP๋ฅผ ํ๊ณ ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ ์ธ๋ถ๋ง IP๊น์ง ํ์ฉํด์ฃผ์ด์ผ CORS ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
Reverse Proxy๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์ ๋ฐ์ ๋ด๋ถ ์๋ฒ๋ก ์ ๋ฌํด ์ฃผ๋ ์ญํ ๋ง ํ๋ฉฐ, CORS๋ ํด๋ผ์ด์ธํธ์ ์๋ ์ถ์ฒ(Origin)์ ๊ธฐ์ค์ผ๋ก ํ์ฉ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ๋ง IP๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฉด ์์ฒญ์ด ์ฐจ๋จ๋๋ค.
์ด๋ ๊ฒ ์ค์ ํ ํ ์คํธ ํ ๊ฒฐ๊ณผ ์ ์์ ์ผ๋ก ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์๋ค.
๐ ์ ์ฉ ํ 1MB ์ด์ ํ์ผ ์ ๋ก๋ ์๋๋ ๋ฌธ์ ๋ฐ์!
๋ํ NGINX ์ค์ ํ 1MB ์ด์์ ํ์ผ์ด ์ ๋ก๋ ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Nginx์์๋ ํ์ผ ์ ๋ก๋์ 1M ์ด์์ ํ์ผ์ด ์ ๋ก๋ ๋์ง ์๊ฒ ๋์ด์๋ค. ๋ฐ๋ผ์ ์์ conf ํ์ผ์์ ์ ๋ก๋ ํฌ๊ธฐ ์ ํ ์ค์ ์ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค.
โ proxy_set_header X-Forwarded-For์ proxy_set_header Host ์ค์ ํ๋ ์ด์
- X-Forwarded-For
- ์๋ ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ด๋ถ ์๋ฒ์ ์ ๋ฌํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Nginx๋ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ก ์๋ํ ๋, ์์ฒญ์ด ๋ง์น Nginx ์๋ฒ์์ ์จ ๊ฒ์ฒ๋ผ ๋ด๋ถ ์๋ฒ์ ์ ๋ฌํ๋ค. ๋ฐ๋ผ์ ๋ด๋ถ ์๋ฒ๋ ์๋ ํด๋ผ์ด์ธํธ์ IP๋ฅผ ์ ์ ์๋ค.
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ๋ฅผ ์ฌ์ฉํ๋ฉด, Nginx๊ฐ ์๋ ์์ฒญ์ ํด๋ผ์ด์ธํธ IP๋ฅผ X-Forwarded-For ํค๋์ ์ถ๊ฐํ์ฌ ๋ด๋ถ ์๋ฒ๋ก ์ ๋ฌํ๋ค. ์ด๋ฅผ ํตํด ๋ด๋ถ ์๋ฒ๋ ์์ฒญ์ ์๋ ์ถ์ฒ IP๋ฅผ ์๋ณํ ์ ์์ผ๋ฉฐ, ๋ก๊ทธ ๋ถ์์ด๋ ๋ณด์ ์ค์ ์ ์ ์ฉํ๋ค.
- Host
- ์๋ ์์ฒญ์ ํธ์คํธ ํค๋๋ฅผ ๋ด๋ถ ์๋ฒ์ ์ ๋ฌํ๋ค.
- ์ด ์ค์ ์ด ์์ผ๋ฉด, ๋ด๋ถ ์๋ฒ๋ Nginx๊ฐ ์ค์ ํ IP๋ ํธ์คํธ ์ ๋ณด๋ฅผ ํธ์คํธ๋ก ์ธ์ํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ด ์ค์ ์ ํนํ, ๊ฐ์ ํธ์คํธ ์ค์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ฐ, ๋ด๋ถ ์๋ฒ๊ฐ ์ฌ๋ฌ ํธ์คํธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋ตํ๋ ๊ฒฝ์ฐ, ์๋ ์์ฒญ์ ํธ์คํธ ์ ๋ณด๋ฅผ ์์์ผ ์ ํํ ์๋ต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
'Study > Back-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ก๊ทธ ๋ ๋ฒจ ๋ฐ ๋ก๊ทธ ์์ฑ ๊ธฐ์ค (0) | 2024.11.11 |
---|---|
[Node.js] Express์ listen ๋ฐ Cors ์ค์ (1) | 2024.11.07 |
[Spring - Android] JPA ํ์ฉ ์ฐ๋ํ๊ธฐ (2023.07.20~21) (0) | 2023.07.20 |
[Node.js] nunjucks (2023.07.12) (0) | 2023.07.12 |
[Node.js] Socket ํต์ (2023.07.10) (0) | 2023.07.10 |