nginx가 리버스 프록시로 구성되면 Apache의 ProxyPreserveHost와 같은 다운 스트림 서버에 호스트 헤더를 다시 쓸 수 있습니까?


답변:


11

문제에 대한 해결책을 찾았습니다. 다운 스트림 서버의 호스트를 보내는 것은 nginx의 기본 동작이며, 지시문을 사용하여 재정의했습니다.

proxy_set_header Host $host;

브라우저가 요청한 호스트를 다운 스트림 서버로 보냅니다. 내가 원하는 것과 정반대입니다.

따라서 nginx는 Apache와 동일하지 않지만 지시문 ProxyPreserveHost으로 동일한 동작을 수행 할 수 있으며 proxy_set_headernginx의 솔루션이 더 일반적입니다.


이어야 proxy_set_header Host $http_host;합니다.
Rob

@Rob, $http_hostNginx 문서에 따르면 존재하지 않습니다 : nginx.org/en/docs/varindex.html
Daniel Serodio

1
@DanielSerodio 사실, 적어도 99.99 %의 연결에 대해 존재합니다. 설명서를 참조하십시오 . 또한 매우 미묘하게 다릅니다 $host.
Michael Hampton

@MichaelHampton 링크에 감사드립니다
Daniel Serodio

1

실제 예 :

  set $s3_bucket 'SOMEBUCKET.s3.amazonaws.com';

  location / {
        send_timeout 5m;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
        proxy_connect_timeout 240;
        proxy_http_version 1.1;
        proxy_set_header Host $s3_bucket;
        proxy_set_header Authorization '';
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_ignore_headers "Set-Cookie";
        proxy_buffering off;
        proxy_intercept_errors on;
        proxy_redirect off;
        resolver 8.8.8.8;
        proxy_pass http://$s3_bucket;
        }

이것은 nginx를 사용하고 있습니다.
cod3fr3ak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.