확인되지 않은 업스트림 서버 주소에 대한 nginx 변수가 있습니까?

확인되지 않은 업스트림 서버 주소에 대한 nginx 변수가 있습니까?

nginx를 업스트림 블록의 서버 그룹에 대한 역방향 프록시로 사용할 때 확인되지 않은 서버 이름에 해당하는 변수가 있습니까? 예를 들어 다음 구성을 고려해보세요.

http {
    upstream foo {
        server foo1.example.com:8080;
        server foo1.example.com:8081;
        server foo2.example.com:8080;
        server foo2.example.com:8081;
    }
    server {
        server_name foo.example.com;
        location / {
            proxy_pass http://foo;
        }
    }
}

foo.example.com, foo1.example.com및 를 foo2.example.com각각 192.0.2.1, 192.0.2.2 및 192.0.2.3으로 확인되는 이름으로 정의 합니다 .

요청이 들어오고 nginx가 포트 8080을 업스트림 서버로 foo.example.com선택하기로 결정하고 요청이 성공했다고 가정합니다. foo2.example.com그러면 제가 아는 한 다음은 일부 관련 변수의 값이 될 것입니다.

  • $host = foo.example.com
  • $proxy_host = foo
  • $upstream_addr = 192.0.2.3:8080(*)

그러나 이들 중 어느 것도 업스트림 서버 구성에 지정된 값과 일치하지 않습니다. 좀 더 구체적으로 말하자면, 제 질문은 foo2.example.com:8080이 경우에 어떤 변수가 값을 갖게 될까요?입니다 .

XY 문제를 피하기 위해 제가 달성하려는 작업은 다음과 같습니다.

  1. 확인된 IP 주소는 일시적이거나 1:1 역방향 조회를 지원하지 않을 수 있으므로 IP 주소가 아닌 호스트 이름으로 업스트림 서버를 기록합니다.
  2. 업스트림 서버 로 map, 로깅 목적으로도 더 유용한 또 다른 정보로
  3. 서버가 동일한 인증서를 공유하지 않는 경우 업스트림 SSL에 대한 호스트 이름 확인(예: 을 통해)을 구성합니다 proxy_ssl_name(이는 자체적인 질문을 보장할 수 있지만 유일한 사용 사례는 아닙니다).

$upstream_addr(*) = 요청의 모든 단계에서 변수를 사용할 수 없는 것 같습니다. 예를 들어 proxy_set_header Upstream-Addr $upstream_addr;위치 블록에 추가해도 효과가 없는 것 같습니다. 이는 변수가 비어 있음을 의미합니다.

답변1

프록시는 까다로울 수 있습니다. Nginx는 proxy_set_header당신이 원하는 것입니다.Nginx 문서

proxy_set_header    Host            $host;

이봐예를 들어프록시에 대한 더 자세한 구성

관련 정보