Nginx - 为动态内容设置缓存控制标头

Nginx - 为动态内容设置缓存控制标头

我们正在尝试为动态文件(特别是 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;
}

相关内容