如何让 NGINX 传递上游服务器的“服务器”标头?
例如,如果 NGINX 代理到带有服务器标头“Apache2.2 (CentOS)”的 Apache 服务器,它会将其删除并用“NGINX/1.0.1”替换。我们的服务器标头中有我们的机器 ID,因此我们需要让 NGINX 停止覆盖它们。
答案1
Nginx 没有办法关闭服务器标头,最接近的选项是服务器令牌指令但这只会关闭版本号。
我从来没有真正尝试过,但是proxy_pass_header 指令 可能允许您将服务器标头指定为应传递给客户端的内容。
我个人建议在为其设计的自定义标头 (X-WHATEVER) 中发送机器 ID,因为使用 RFC 定义的标头进行与其设计目的不同的行为最终会给您带来麻烦。
如果 proxy_pass_header 不起作用,那么我很确定唯一的选择就是修补 Nginx 源以不覆盖它。
答案2
指令proxy_pass_header
完全符合你的要求:
proxy_pass_header Server;
答案3
对于您的情况,可以使用 $upstream_http_* 变量保留原始响应中的任何标头:
add_header 服务器 $upstream_http_server;