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

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

我有一个 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;
}

答案1

proxy_set_header指令HttpProxy模块允许您执行此操作。例如:

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

答案2

默认情况下,nginx 转发所有(proxy_pass_request_headers 开启;) 标头到后端服务器。但是,如果您的请求标头(可能是自定义标头)在标头名称中包含下划线 ( _ ),则 nginx 会阻止这些标头。

Ex: authenticate_type, cdn_enable.

要使 Nginx 能够将所有或自定义请求的标头传递到后端,请打开下划线选项。

underscores_in_headers on;

答案3

您可以使用上游标头(以 $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

答案4

模块ngx_headers_more允许您更改和添加 http 标头。

相关内容