[nginx] NGINX Reverse Proxy

업데이트:     Updated:

카테고리:

태그:

NGINX Reverse Proxy

프록시 서버의 기본 구성에 대해 설명합니다. 다양한 프로토콜을 통해 NGINX 에서 원 서버로 요청을 전달하고, 원 서버로 전송되는 클라이언트 요청 헤더를 수정하는 방법을 배웁니다.

요청 전달

  • 원 서버에 요청을 전달하기 위해 proxy_pass 지시문은 location 내부에 지정됩니다.
  • locationpath로의 모든 요청을 proxy_pass 지시문에 지정된 서버 주소로 전달합니다.
  • 이 주소는 도메인 이름 또는 IP 주소로 지정할 수 있습니다. 주소에는 포트도 포함될 수 있습니다.
  • 비 HTTP 서버에 요청을 전달하려면 적절한 지시문을 사용해야 합니다.
    • fastcgi_pass 는 FasgCGI 서버에 요청을 전달합니다.
    • uwsgi_pass 는 uwsgi 서버에 요청을 전달합니다.
    • scgi_pass 는 SCGI 서버에 요청을 전달합니다.
    • memcached_pass 는 memcached 서버에 요청을 전달합니다.
location /some/path {
    proxy_pass http://www.example.com/link/;
}

e.g)
location ~ \.php {
    proxy_pass http://127.0.0.1:8080;
}

NGINX location regex


NGINX 에서 location 지시문을 이용하면 요청된 URL에 따라 특정 위치로 요청을 라우팅할 수 있습니다.

location Syntax

  • NGINX location 블록은 server 블록 또는 사전에 정의된 location 블록 하위에 추가될 수 있습니다.
  • modifier는 선택전 매개변수입니다. location 블록에 modifier가 있으면 NGINX가 다른 순서로 URL을 처리할 수 있습니다.
location [modifier] [Regex] {
  ...
}
modifier 목록
  1. ’/’ : / 하위의 모든 요청 매칭
  2. ‘/directory_name/’ : /directory_name/로 시작하는 모든 요청과 매칭, 결과적으로 요청된 URI에 대해 ‘/’ 보다 더 구체적으로 일치하는 블록을 검색
  3. ’=’ : 요청된 URI와 정확하게 일치
  4. ’~’ : 요청된 URI에 대해 대소문자를 구분하여 정규식 패턴 검색
  5. ’~*’ : 대소문자를 구분하지 않고 정규식 패턴 검색
  6. ’^~’ : 대소문자를 구분하고 정규식 앞부분과 일치
modifier 우선순위
1 순위 2 순위 3 순위 4 순위 5 순위
= ^~ ~ ~* /

요청 헤더 전달

  • 기본적으로 NGINX는 요청을 전달할 때 “Host” 및 “Connection” 두 헤더 필드를 재정의합니다.
  • “Host”는 $proxy_host 변수로 설정되고 “Connection”은 close로 설정됩니다.
  • 이러한 설정을 변경하고 다른 헤더 필드로 수정하려면 proxy_set_header 지시문을 사용합니다.
  • 이 지시문은 location 지시문 상위에서 지정할 수 있습니다. 또한 특정 server 컨텍스트 또는 http 블록에서 지정할 수도 있습니다.
location /some/path/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Note:

$proxy_host : proxy_pass 지시문에 지정된 proxy server의 이름 및 포트
$host : 현재 요청의 호스트명 $remote_addr : 클라이언트 주소

  • 이 구성에서 “Host” 필드는 $host 변수로 설정됩니다.
  • 요청이 전달될 때 헤더 필드가 전달되지 않도록 하려면 필드 값을 빈 문자열로 설정합니다.
location /some/path/ {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://localhost:8080;
}

📌출처

NGINX Docs


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

Nginx 카테고리 내 다른 글 보러가기

댓글남기기