当nginxconfiguration为反向代理时,是否可以将主机头重写到下游服务器,如Apache的ProxyPreserveHost?

我似乎无法在nginx中find与Apache的ProxyPreserveHost相同的http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehost选项。 这是将代理逆向到虚拟主机所必需的。

它所做的是将浏览器提供的主机名replace为下游服务器的主机名。

它存在吗?

我想我find了解决问题的办法。 发送下游服务器的主机是nginx中的默认行为,我用下面的命令覆盖了它:

proxy_set_header主机$主机;

其中将浏览器请求的主机发送到下游服务器。 正好和我想要的相反。

所以,虽然nginx没有与Apache的ProxyPreserveHost等价,但是proxy_set_header命令可以实现同样的行为,而nginx的解决scheme更加通用。

一个工作的例子:

  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; }