nginx에서 프록시 서버 사용을 위해 다른 호스트, 머신으로 이동시키는 설정 방법을 알아봅니다.

! 프록시 서버(Proxy server)란?
클라이언트와 서버 사이에 존재하는 서버로 클라이언트의 요청을 받아 Reverse에 위치한 서버에 전달하는 상호 중계 목적의 서버를 말합니다. 프락시 서버가 사용되는 이유는 보안이나 트래픽 분산 등의 로드 밸런싱 목적으로 사용됩니다.


# nginx 프락시 서버, 리다이렉트 설정하기
아래서는 프락시 서버로 들어온 요청을 다른 위치로 포워딩, 리다이렉트 설정 방법에 대하여 알아봅니다. 먼저 아래와 같은 nginx 설정이 있다고 생각해 봅니다.
server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name: _;

  location / {
    proxy_pass http://mysite2.com;
  }
}

위 설정은 80 포트 요청으로 들어오는 클라이언트 요청에 대하여 mysite2.com으로 전달합니다. 여기서 다른 웹서버로 전달하기 위해 proxy_pass 값을 설정합니다.

proxy_pass  // 대상 서버의 주소

가장 중요한 설정은 바로 proxy_pass를 사용하여 최종 목적지가 될 타겟 서버의 주소를 설정하는 것입니다. 아래는 그 외의 정보들 입니다.


@ HTTP 헤더의 값 설정하기
여러 대의 프록시 서버를 사용하는 경우 어떤 프록시 서버에서 요청되었는지를 헤더에 추가하여 사용합니다. 이때 아래와 같이 proxy_set_header를 사용하여 설정할 수 있습니다.
server {
  ...
  location / {
    proxy_pass http://mysite2.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

위와 같이 proxy_set_header에 Host 그리고 X-Real-IP 이름의 값을 사용하여  헤더값을 추가하였습니다.

그 외 자주 사용되는 설정 값은 아래와 같은 것들이 있습니다.

proxy_connect_timeout  // 프록시 서버 제한 시간 설정하기
proxy_method // HTTP 메소드를 설정, 변경하는데 사용     


# 마치면서
여기까지 nginx의 프록시 설정 방법에 대하여 알아보았습니다. 참고로 프록시 서버를 통한 이동과 서버 리다이렉트(redirect)는 다르므로 목적에 맞게 사용할 필요가 있습니다. 간단한 이 둘의 차이점은 redirect의 경우 다른 곳으로 이동하는 것을 알 수 있지만 proxy의 경우 완전히 숨기거나 컨트롤 하는 등의 작업이 가능합니다.