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

Rob*_*son 32 nginx reverse-proxy

我有一个 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;
}
Run Code Online (Sandbox Code Playgroud)

mgo*_*ven 25

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

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以使用“$http_x_custom_referrer”。但是,客户端发送的所有标头都应自动传递到后端。您是否在某处设置了“proxy_pass_request_headers off”? (2认同)

小智 5

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

Ex: authenticate_type, cdn_enable.
Run Code Online (Sandbox Code Playgroud)

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

underscores_in_headers on;
Run Code Online (Sandbox Code Playgroud)