Nginx 不处理 proxy_hide_header 和 proxy_ignore_header 指令

Nginx 不处理 proxy_hide_header 和 proxy_ignore_header 指令

我在尝试让 Nginx 忽略并隐藏来自代理服务器的某些标头时遇到了麻烦。

我想让 Nginx 隐藏并忽略“Cache-Control”和“Server”标头,但是它不起作用,我不知道为什么。

我的配置如下:

location / {
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
    add_header Cache-Control "public";
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    access_log off;
}

但即使这样,我仍然会收到原始“Cache-Control”和“Server”标头。

你知道我做错什么了吗?

PS 我无法使用 ngx_headers_more 模块。我无法将此模块添加到我们的 Nginx 安装中。

答案1

指令proxy_ignore_headers告诉 nginx 忽略特殊标头的内容,从而导致特定的内部行为:

“X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”和“Vary”设置响应缓存的参数;

“X-Accel-Redirect” 执行内部重定向到指定的 URI;

“X-Accel-Limit-Rate”设置向客户端传输响应的速率限制;

“X-Accel-Buffering” 启用或禁用响应缓冲;

“X-Accel-Charset” 设置响应所需的字符集。

如果要隐藏来自上游服务器的标头,则需要使用proxy_hide_headerServer默认情况下,标头不会传递给发送给客户端的响应,如DateX-PadX-Accel-...标头。

因此,这应该可行:

location / {
    access_log off;
    add_header Cache-Control "public";
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
}  

确保您没有从已经具有缓存数据的浏览器进行测试,请使用curl

相关内容