[nginx] NGINX Reverse Proxy
카테고리: Nginx
태그: Nginx
NGINX Reverse Proxy
프록시 서버의 기본 구성에 대해 설명합니다. 다양한 프로토콜을 통해 NGINX 에서 원 서버로 요청을 전달하고, 원 서버로 전송되는 클라이언트 요청 헤더를 수정하는 방법을 배웁니다.
요청 전달
- 원 서버에 요청을 전달하기 위해
proxy_pass지시문은location내부에 지정됩니다. location의path로의 모든 요청을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 목록
- ’/’ : / 하위의 모든 요청 매칭
- ‘/directory_name/’ : /directory_name/로 시작하는 모든 요청과 매칭, 결과적으로 요청된 URI에 대해 ‘/’ 보다 더 구체적으로 일치하는 블록을 검색
- ’=’ : 요청된 URI와 정확하게 일치
- ’~’ : 요청된 URI에 대해 대소문자를 구분하여 정규식 패턴 검색
- ’~*’ : 대소문자를 구분하지 않고 정규식 패턴 검색
- ’^~’ : 대소문자를 구분하고 정규식 앞부분과 일치
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;
}
📌출처
👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄
댓글남기기