nginx-从上游服务器读取自定义标头


80

我将nginx用作反向代理,并尝试从上游服务器(Apache)的响应中读取自定义标头,但未成功。Apache响应如下:

HTTP/1.0 200 OK
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Connection: close
Content-Type: application/json; charset=UTF-8
My-custom-header: 1

我想从My-custom-header中读取值,并在if子句中使用它:

location / {
    // ...
    // get My-custom-header value here
    // ...
}

这可能吗?提前致谢。

Answers:


91

$ http _ name_of_the_header_key

即,如果您origin = domain.com在标题中,则可以使用$http_origin获取“ domain.com

在nginx中确实支持任意请求头字段。在上面的示例中,变量名称的最后一部分是将字段名称转换为小写字母,并用下划线代替了短划线

参考文档在这里:http : //nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

对于您的示例,变量将为$http_my_custom_header


3
实际上,那是错误的,不应将其标记为答案。对于以后遇到此问题的任何人,正确的变量是$http_。以OP为例,$http_my_custom_header(区分大小写!)
jduncanator 2014年

我已更正此答案以匹配文档;)
Paul Dixon

12
事实证明,这也不正确。OP要求读取响应头的值。您应该使用$sent_http_my_custom_headernginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
弥敦道

如果您需要上游响应头,请在下面检查@ dev-gosain答案
filimonov

13
答案是错误的。询问的人正在尝试从上游服务器访问标头。正确答案是stackoverflow.com/a/30879181/111995
geekQ

48

我面临着同样的问题。我都尝试过$http_my_custom_header$sent_http_my_custom_header但是对我没有用。

虽然通过使用解决了这个问题$upstream_http_my_custom_header


8

使用$ http_MY_CUSTOM_HEADER

你可以写一些像

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}

6
男人说-变量名的最后一部分是将字段名转换为小写字母,并用短划线代替下划线。
Arjun Sreedharan 2015年

您救了我的一天,谢谢
mos
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.