Определите определенный заголовок элемента управления кэшем только для выбранного файла - PullRequest
0 голосов
/ 10 июля 2019

Я настраиваю сервер Nginx (версия 1.17.1) для Гэтсби, следуя рекомендации на https://www.gatsbyjs.org/docs/caching/.

Фрагмент ниже - это часть моего блока server {}, пытающегося реализовать рекомендуемую конфигурацию кэширования;

location ~* \.(?:html)$ {
    add_header Cache-Control "public, max-age=0, must-revalidate";
}

location /static {
    add_header Cache-Control "public, max-age=31536000, immutable";
}

location ~* \.(?:css|js)$ {
    add_header Cache-Control "public, max-age=31536000, immutable";
}

location /sw\.js {
    add_header Cache-Control "public, max-age=0, must-revalidate";
}

Аналогично использовался оператор if вместо блока location {} для определения конфигурации кэша для рабочего файла сервиса, sw.js, как показано ниже;

if ($request_uri ~ ^sw\.(?:js)$) {
    set $no_cache 1;
}

К сожалению, все файлы успешно кэшируются, как и ожидалось, кроме sw.js.

Что я делаю не так и как я могу это исправить, чтобы эффективно установить заголовок управления кэшем для sw.js в public, max-age=0, must-revalidate?

1 Ответ

2 голосов
/ 10 июля 2019

Порядок приоритета location описан здесь https://nginx.org/en/docs/http/ngx_http_core_module.html#location

При обнаружении точного соответствия (с использованием модификатора =) поиск прекращается, и регулярные выражения не проверяются, поэтому выможете использовать это для вашего sw.js:

location = /sw.js {
    add_header Cache-Control "public, max-age=0, must-revalidate";
}
...