乐闻世界logo
搜索文章和话题

How to add a response header on nginx when using proxy pass

3个答案

1
2
3

在 Nginx 中,当我们作为代理向后端服务器转发请求时,有时候我们需要在响应头中添加一些自定义的头信息。这可以通过使用 add_header 指令来完成,该指令通常在 serverlocation 块中指定。

以下是 Nginx 配置文件中添加自定义响应头的一个例子:

nginx
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; # 此处是你的后端服务器地址 add_header X-Proxy-Cache $upstream_cache_status; # 其他代理设置,例如设置代理头信息等 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-Forwarded-Proto $scheme; } }

在上面的配置中,我们为所有通过 / location 块代理的请求添加了一个名为 X-Proxy-Cache 的自定义响应头。该头的值设置为 $upstream_cache_status 变量的值,这个变量通常用来表示后端服务器的缓存状态。

需要注意的是,add_header 指令不仅可以添加常量值的头,还可以添加由 Nginx 变量动态生成的值。然而,如果使用了 add_header 指令,你需要确保复制所有默认的头信息,因为 add_header 指令会覆盖 Nginx 的默认行为,只输出你在配置中明确指定的头。

上述配置仅是一个简单的例子,你可以根据实际需要添加其他的响应头或者进行更复杂的配置。

2024年6月29日 12:07 回复

add_header无论有没有,效果都一样好proxy_pass。我今天刚刚设置了一个配置,我在其中使用了该指令。但我必须承认,我在设置这个过程时也遇到了困难,但没有确切地回忆起原因。

现在我有一个工作配置,它包含以下内容(除其他外):

shell
server { server_name .myserver.com location / { proxy_pass http://mybackend; add_header X-Upstream $upstream_addr; } }

与Sebastian Goodman 在他的回答中提到的HttpHeadersMoreModule相比,在 nginx 1.7.5 add_header之前仅对成功响应起作用。

由于 nginx,即使在错误响应中1.7.5,您也可以使用关键字always来包含自定义标头。例如:

shell
add_header X-Upstream $upstream_addr always;

限制:server您无法使用覆盖标头值add_header

2024年6月29日 12:07 回复

你可以尝试这个解决方案:

在您的location块中,当您使用时,proxy_pass请执行以下操作:

shell
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 }

我不确定这是否正是您所需要的,但尝试对此方法进行一些操作,也许结果会适合您的问题。

您也可以使用此组合:

shell
proxy_hide_header headerSetByProxy; set $sent_http_header_set_by_proxy yourValue;
2024年6月29日 12:07 回复

你的答案