Назад | Перейти на главную страницу

Nginx исключает каталог из правила

Я пытаюсь исключить 2 каталога из правила кеширования в nginx.

Итак, у меня есть это правило кеширования, которое отлично работает.

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 не может генерировать публичные изображения из моих основных изображений.

Итак, я хочу / пытаюсь исключить 2 каталога из правила, но я не могу заставить его работать.

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";
    }

Получается, что правило "no-cache" всегда перезаписывается правилом типов файлов ?! Как я могу достичь своей цели?

Наконец-то разобрался. Это работает для меня:

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";
}