让 nginx 发送过期标头

让 nginx 发送过期标头

我正在尝试让 nginx 发送过期标头,我尝试了两种不同的方法:

location ~* ^.+\.(ico|css|js|gif|jpe?g|png)\?[0-9]+$ {
  expires max;
}

location / {
  if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)\?[0-9]+$") {
    expires max;
    break;
  }
  #....
}

这些都不起作用。没有发送任何过期标头。有什么想法可以调试此问题吗?

答案1

位置应该仅在路径上,没有查询字符串,因此这不起作用。

请尝试以下操作:

位置 ~* \.(ico|css|js|gif|jpe?g|png)$ {
    最大有效期限;
}

或者,至少下面的方法也应该有效:

位置 ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
    最大有效期限;
}

答案2

通过在其中放置附加指令来测试以确保位置块被调用,例如:

location ~* \.(ico|css|js|gif|jpe?g|png)$ {
    expires max;
    auth_basic "Restricted, please login";
    auth_basic_user_file htpasswd.users;
}

如果在请求匹配文件时没有出现身份验证提示,那么您可以确定该块没有由于之前的中断或其他原因而被调用。

答案3

这些行确实有效,我只是测试错了。这些行正确地尝试仅缓存带时间戳的资源(末尾带有 ?id 的资源),而我查看的是无时间戳的资源。

答案4

是否使用 nginx 作为缓存代理?如果是,请注意上游缓存指令是受尊重的,但您仍然可以指示 nginx 不要使用 proxy_ignore_headers

proxy_ignore_headers X-Accel-Expires Expires Cache-Control;

相关内容