我似乎找不到与 Apache 的 ProxyPreserveHost 相当的东西http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostnginx 中的选项。这是将代理反向到虚拟主机所必需的。
它的作用是将浏览器提供的主机名替换为下游服务器的主机名。
它存在吗?
答案1
我想我找到了解决问题的方法。发送下游服务器的主机是 nginx 中的默认行为,我已使用指令覆盖了它:
proxy_set_header Host $host;
它将浏览器请求的主机发送到下游服务器。这与我想要的完全相反。
因此,虽然 nginx 没有与 Apache 的等效功能ProxyPreserveHost
,但可以使用指令实现相同的行为proxy_set_header
,并且 nginx 的解决方案更为通用。
答案2
一个工作示例:
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;
}