nginx에서 Apache의 ProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehost 옵션 과 동등한 것을 찾을 수없는 것 같습니다 . 프록시를 가상 호스트로 되 돌리는 데 필요합니다.
브라우저가 제공하는 호스트 이름을 다운 스트림 서버의 호스트 이름으로 바꾸는 것입니다.
존재합니까?
nginx에서 Apache의 ProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehost 옵션 과 동등한 것을 찾을 수없는 것 같습니다 . 프록시를 가상 호스트로 되 돌리는 데 필요합니다.
브라우저가 제공하는 호스트 이름을 다운 스트림 서버의 호스트 이름으로 바꾸는 것입니다.
존재합니까?
답변:
문제에 대한 해결책을 찾았습니다. 다운 스트림 서버의 호스트를 보내는 것은 nginx의 기본 동작이며, 지시문을 사용하여 재정의했습니다.
proxy_set_header Host $host;
브라우저가 요청한 호스트를 다운 스트림 서버로 보냅니다. 내가 원하는 것과 정반대입니다.
따라서 nginx는 Apache와 동일하지 않지만 지시문 ProxyPreserveHost
으로 동일한 동작을 수행 할 수 있으며 proxy_set_header
nginx의 솔루션이 더 일반적입니다.
$http_host
Nginx 문서에 따르면 존재하지 않습니다 : nginx.org/en/docs/varindex.html
$host
.
실제 예 :
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;
}
proxy_set_header Host $http_host;
합니다.