我似乎在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选项等效的选项。这是反向代理到虚拟主机所必需的。
它的作用是将浏览器提供的主机名替换为下游服务器的主机名。
是否存在?
Answers:
我想我找到了解决问题的办法。发送下游服务器的主机是nginx中的默认行为,我已经使用伪指令覆盖了它:
proxy_set_header Host $host;
它将浏览器请求的主机发送到下游服务器。与我想要的完全相反。
因此,尽管nginx不具有与Apache等效的功能ProxyPreserveHost
,但使用proxy_set_header
指令可以实现相同的行为,并且nginx的解决方案更为通用。
$http_host
根据Nginx文档不存在:nginx.org/en/docs/varindex.html
一个工作示例:
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;
。