我们正在尝试为动态文件(特别是 WordPress)实现缓存控制标头。
例如,由插件生成的站点地图domain.com/sitemap_index.xml
sitemap_index.xml 实际上并不存在,它由 WordPress 动态控制,更具体地说是一个插件。我们试图通过设置缓存控制标头来确保它不会被缓存,例如:
location ~* \.(xml)$ {
add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0";
try_files $uri $uri/ /index.php?$args;
}
虽然位置块确实有效,但如果您删除 try_files,则页面将抛出 404,因为 WP 没有处理请求,但 Cache-Control 标头未被设置。
如果您创建文件进行测试,那么缓存控制标头就会被设置。
是否根本无法在动态内容上设置标题,而需要通过 PHP/应用程序本身来完成?
感谢您的所有反馈。
答案1
add_header
如果您未在指令always
中指定add_header
,则nginx 在返回 404 响应时不会使用。
来自 nginx 的文档页面add_header
(强调我的):
如果响应代码等于,则将指定字段添加到响应标头 200、201 (1.3.10)、204、206、301、302、303、304、307 (1.1.16、1.0.13) 或 308 (1.13.0). 参数值可以包含变量。
和
如果
always
参数指定(1.7.5),标头字段无论响应代码如何都会被添加。
尝试将您的配置更改为如下内容:
location ~* \.(xml)$ {
add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0" always;
try_files $uri $uri/ /index.php?$args;
}