当nginx配置为反向代理时,是否可以像Apache的ProxyPreserveHost一样将host头重写到下游服务器?

当nginx配置为反向代理时,是否可以像Apache的ProxyPreserveHost一样将host头重写到下游服务器?

我似乎找不到与 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;
        }

相关内容