如何仅为根路径配置缓存响应 header?
how to configure cache response header for root path only?
我正在为静态文件使用 nginx,并希望所有文件都应该由浏览器缓存,而不是 index.html。尝试了以下配置,但我也得到了 index.html 的缓存响应 header。
我该如何更改配置?
server{
location = / {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
}
要了解 try_files $uri $uri/ ...
指令的逻辑(以及整个 nginx 行为),我建议您阅读 this 在 ServerFault 的回答。最重要的是
The very important yet absolutely non-obvious thing is that an index
directive being used with try_files $uri $uri/ =404
can cause an internal redirect.
这是您当前配置的情况。 try_files
指令的 $uri/
参数导致 nginx 进行从 /
到 /index.html
的内部重定向,而该 URI 又由 location / { ... }
处理,不是 location = / { ... }
!要实现你想要的,你可以使用
location = /index.html {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
此外,由于 try_files $uri $uri/ =404;
是默认的 nginx 行为,您可以进一步将其简化为
location = /index.html {}
location / {
add_header 'Cache-Control' "public, max-age=3600";
}
我正在为静态文件使用 nginx,并希望所有文件都应该由浏览器缓存,而不是 index.html。尝试了以下配置,但我也得到了 index.html 的缓存响应 header。 我该如何更改配置?
server{
location = / {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
}
要了解 try_files $uri $uri/ ...
指令的逻辑(以及整个 nginx 行为),我建议您阅读 this 在 ServerFault 的回答。最重要的是
The very important yet absolutely non-obvious thing is that an
index
directive being used withtry_files $uri $uri/ =404
can cause an internal redirect.
这是您当前配置的情况。 try_files
指令的 $uri/
参数导致 nginx 进行从 /
到 /index.html
的内部重定向,而该 URI 又由 location / { ... }
处理,不是 location = / { ... }
!要实现你想要的,你可以使用
location = /index.html {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
此外,由于 try_files $uri $uri/ =404;
是默认的 nginx 行为,您可以进一步将其简化为
location = /index.html {}
location / {
add_header 'Cache-Control' "public, max-age=3600";
}