GOOGLE ADS

понедельник, 25 апреля 2022 г.

как настроить заголовок ответа кеша только для корневого пути?

я использую nginx для статических файлов и хочу, чтобы все файлы кэшировались браузером, но не index.html. Пробовал следующую конфигурацию, но я также получаю заголовок ответа кеша для index.html. как изменить конфиг?

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), я рекомендую вам прочитать этот ответ на ServerFault. Существенная вещь

Очень важная, но абсолютно неочевидная вещь заключается в том, что indexдиректива, используемая with, try_files $uri $uri/ =404может вызвать внутреннее перенаправление.

Это то, что происходит с вашей текущей конфигурацией. Аргумент $uri/директивы try_filesзаставляет 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";
}

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...