将nginx配置为反向代理后,它可以将主机标头重写到下游服务器(如Apache的ProxyPreserveHost)吗?


Answers:


11

我想我找到了解决问题的办法。发送下游服务器的主机是nginx中的默认行为,我已经使用伪指令覆盖了它:

proxy_set_header Host $host;

它将浏览器请求的主机发送到下游服务器。与我想要的完全相反。

因此,尽管nginx不具有与Apache等效的功能ProxyPreserveHost,但使用proxy_set_header指令可以实现相同的行为,并且nginx的解决方案更为通用。


应该是proxy_set_header Host $http_host;
罗布

@Rob,$http_host根据Nginx文档不存在:nginx.org/en/docs/varindex.html
Daniel Serodio,

1
@DanielSerodio实际上,是的,至少在99.99%的连接中确实存在。请参阅文档。它也与略有不同$host
迈克尔·汉普顿

@MichaelHampton我已改正,感谢您的链接
Daniel Serodio

1

一个工作示例:

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

这是使用nginx的。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.