如何在使用proxy_pass时在nginx上添加响应头?
我想为从nginx后面的服务器收到的响应添加一个自定义头。
虽然add_header
适用于nginx处理的响应,但是在使用proxy_pass
时它不执行任何操作。
有一个名为HttpHeadersMoreModule的模块,可以让您更好地控制标题。 它不是与Nginx一起来的,需要额外的安装。 有了它,你可以做这样的事情:
location ... { more_set_headers "Server: my_server"; }
这将“将服务器输出标题设置为任何状态码和任何内容types的自定义值”。 它将replace已经设置的标题,或者如果未设置,添加它们。
add_header
和proxy_pass
一样工作,没有。 我今天刚刚设置了一个configuration,我已经准确地使用了这个指令。 不过,我不得不承认,尽pipe如此,我也没有完全回想起这个原因。
现在我有一个工作的configuration,它包含以下(其中包括):
server { server_name .myserver.com location / { proxy_pass http://mybackend; add_header X-Upstream $upstream_addr; } }
在nginx 1.7.5
之前, add_header只在成功的响应上工作,与Sebastian Goodman在他的回答中提到的HttpHeadersMoreModule相反。
自nginx 1.7.5
always
,即使在错误响应中,您也可以使用关键字always
来包含自定义头文件。 例如:
add_header X-Upstream $upstream_addr always;
限制:您无法使用add_header
覆盖server
标头值。
正如奥利弗写道:
add_header
和proxy_pass
一样工作,没有。
但是,正如Shane写的,从Nginx 1.7.5开始,你必须always
传递,以便让add_header
工作来处理错误响应,如下所示:
add_header X-Upstream $upstream_addr always;
你可以试试这个解决scheme:
在你使用proxy_pass
时你的location
块做这样的事情:
location ... { add_header yourHeaderName yourValue; proxy_pass xxxx://xxx_my_proxy_addr_xxx; # Now use this solution: proxy_ignore_headers yourHeaderName // but set by proxy # Or if above didn't work maybe this: proxy_hide_header yourHeaderName // but set by proxy }
我不确定它是否正是你所需要的,但尝试一些这种方法的操纵,也许结果将适合你的问题。
你也可以使用这个组合:
proxy_hide_header headerSetByProxy; set $sent_http_header_set_by_proxy yourValue;