server {
server_name test.test.co.kr;
listen 80;
proxy_read_timeout 3600000;
proxy_send_timeout 3600000;
location / {
# proxy_set_header Host $host;
# proxy_redirect http://localhost:3000 http://test.test.co.kr;
proxy_pass http://localhost:3000;
proxy_set_header Host "http://test.test.co.kr";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
proxy_set_header Host $host;
- 클라이언트가 요청한 원래의 호스트명(도메인)을 백엔드 서버로 전달한다.
$host
는 클라이언트가 요청한 도메인 또는 호스트 이름을 의미한다.
e.g. 클라이언트가 test.com으로 요청을 보낸 경우 nginx는 이 값을 백엔드 서버의 Host 헤더로 전달한다.
- 이 설정은 백엔드 서버가 클라이언트가 접속한 도메인 정보를 알아야 하는 경우 필요하다.
e.g. SSL 인증서 확인, 도메인에 따라 다른 콘텐츠 제공 등
proxy_set_header Upgrade $http_upgrade;
- WebSocket과 같은 프로토콜 업그레이드가 필요한 경우 사용된다.
- 클라이언트 요청의 Upgrade 헤더 값을 전달한다. 이 값은 HTTP/1.1에서 WebSocket 등으로의 프로토콜 전환 요청을 나타낸다.
- 브라우저 네트워크 탭에서 확인할 경우
101 Switching Protocols
응답 코드를 반환한다.
proxy_set_header Connection "upgrade";
- nginx가 클라이언트와 서버 간의 연결을 유지하기 위해 Connection 헤더를 설정한다.
- 클라이언트가 Websocket과 같은 방식으로 프로토콜 업그레이드를 요청하는 경우,
Connection: upgrade
헤더를 설정해 해당 연결이 업그레이드 될 수 있음을 명시한다.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 클라이언트의 원래 IP 주소를 백엔드 서버에 전달한다.
$proxy_add_x_forwarded_for
는 클라이언트의 실제 IP 주소를 나타내며, 이를 X-Forwarded_For
헤더에 추가한다.
- 프록시 서버를 거치면 백엔드 서버는 클라이언트의 실제 IP 주소를 알기 어렵게 되므로, 이 방식을 통해 실제 IP 주소를 서버로 전달한다.
proxy_cookie_domain test.test.com test2.test2.com;
- 서버가
Set-Cookie
헤더에 Domain=test.test.com
으로 설정할 때, nginx가 이를 Domain=test2.test2.com
으로 변경하여 전달한다.
proxy_redirect http://localhost:3000 http://test.test.co.kr;
- 백엔드 서버가 도메인 기반 리다이렉션을 처리할 때, IP 방식으로 접근할 경우 서버는 잘못된 리다이렉션을 수행할 가능성이 있다.
- 이때 localhost:3000으로 접근할 경우 test.test.co.kr로 리디렉션 헤더의 도메인을 변경하는 역할을 한다.
proxy_pass http://localhost:3000;
- nginx가 리버스 프록시로 동작할 때, 클라이언트 요청을 백엔드 서버(또는 다른 서버)로 전달할 수 있게 한다.
- 인자는 어느 서버로 요청을 보내야 하는지 명시함.