Nginx 从规则中排除目录

Nginx 从规则中排除目录

我尝试从 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";
}

相关内容