16강 / 20강
리버스 프록시 — 한 대에 여러 앱을 태운다
nginx 가 문 앞에서 방을 고른다
서버 한 대에 앱이 여럿 있습니다. 이 사이트만 해도 허브가 5316, 파이썬 강의가 5338 … 포트가 서른 개쯤 됩니다.
그렇다고 손님에게 drson.iotok.org:5338 을 치라고 할 수는 없죠.
nginx 가 앞에 서서 443 하나로 다 받고, 안에서 나눠 줍니다.
이것이 리버스 프록시입니다.
가장 작은 리버스 프록시
server {
listen 443 ssl;
server_name drson.iotok.org;
location / {
proxy_pass http://127.0.0.1:5316;
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;
}
}
아래 네 줄이 없으면 앱은 모든 손님이 127.0.0.1 에서 왔다고 믿습니다. 로그도 틀리고, https 인지도 모르게 됩니다.
하위 경로로 나누기 — 끝의 슬래시가 전부다
| proxy_pass | /py/abc 요청이 앱에 닿을 때 |
|---|---|
http://127.0.0.1:5338; (슬래시 없음) |
/py/abc — 접두사가 그대로 간다 |
http://127.0.0.1:5338/; (슬래시 있음) |
/abc — 접두사를 떼고 간다 |
이 강의 앱들은 접두사를 떼고 받은 뒤 <code>X-Forwarded-Prefix</code> 로 다시 알려 줍니다.
Python
브라우저에서 실행
🤔 확인 문제
proxy_pass http://127.0.0.1:5338/; 로 /py/ 를 받았습니다. /py/lesson 요청이 앱에 닿을 때 경로는?해설 끝의 슬래시가 location 접두사를 떼라는 뜻입니다. 슬래시를 빼면
/py/lesson 이 그대로 갑니다.