我在尝试让 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_header
。Server
默认情况下,标头不会传递给发送给客户端的响应,如Date
、X-Pad
和X-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
。