我尝试从 nginx 中的缓存规则中排除 2 个目录。
所以我得到了这个缓存规则,它很有效。
location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
此规则的问题在于,它为每个 jpg 和 png 文件设置了标题,并且 cms 无法从我的主图像生成公共图像。
所以我想/尝试从规则中排除这两个目录,但我无法让它发挥作用。
location ~ ^/(out/pictures/generated/product/|out/pictures/master/product)/ {
add_header Cache-Control "no-cache, max-age=0";
}
location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
但它不起作用。如果我让此规则保持活动状态,它就会起作用。
location ~ ^/(out/pictures/generated/product/|out/pictures/master/product)/ {
add_header Cache-Control "no-cache, max-age=0";
}
因此,似乎“无缓存”规则总是被文件类型规则覆盖?!我怎样才能实现我的目标?
答案1
最后我终于明白了。这对我有用:
location ~ ^/(out/pictures/generated/product/|out/pictures/master/product)/ {
location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
add_header Cache-Control "no-cache, max-age=0";
}