从Nginx反向代理转发自定义标题


25

我有一个Nginx Web服务器充当反向代理,将请求转发到Apache进行其他处理(我恳求您不要问为什么)。我有一个尝试附加自定义标头的请求,我希望nginx将该自定义标头转发到Apache,以便我可以在应用程序中对其进行处理。

我已经浏览了HttpProxyModule文档,但是即使我在正确的位置,它们也没有很好的描述性(很可能是我没有)。

如何获取Nginx转发X-CUSTOM-REFERRER标头?而且,如果可能的话,我希望它可以随传入的任何自定义标头一起转发。如果后者要求不高,那么前者就可以满足我当前的需求。

如您所见,我是nginx的新手,所以补救版本会有所帮助。

谢谢。

更新

我现有配置中的相关代码段:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}

Answers:


20

HttpProxyModule中proxy_set_header指令允许您执行此操作。例如:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;

1
谢谢,@ mgorven。但是,传入值是可变的。我可以从传入的X-Custom-Referrer标头中读取值并将其传递吗?proxy_set_header X-Custom-Referrer $x_custom_referrer或类似的东西?
罗伯·威尔克森

1
是的,您可以使用$http_x_custom_referrer。但是,客户端发送的所有标头应自动传递到后端。你有proxy_pass_request_headers off地方吗
mgorven 2012年

我看不到。我已经用配置文件中的代码片段更新了我的问题。不过,该标头肯定不是它的应用。就是说,我有点假设源应用程序正在发送它,所以我将尽职调查,并确定这是否应为默认行为。
罗伯·威尔克森

您的摘要中的@RobWilkerson proxy_set_header已被注释掉;你也使用$x_custom_referrer而不是$http_x_custom_referrer...
severin 2015年

我认为@mgorven的答案应该更新为,$http_<custom_header_field>而不是$proxy_add_<custom_header_field>
Tri Nguyen


1

您可以使用上游标题(以$ http_开头的名称)和其他自定义标题。例如:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

接下来,转到控制台并使用用户的标头发出请求:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

响应包含由服务器设置的X-Hdr-01和由客户端设置的X-Upstream-01:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1

1
这是在响应上设置标题。OP希望设置要发送到proxy_pass指令上游的标头。
维克多·施罗德(VictorSchröder)
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.