я использую 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";
}
  
Комментариев нет:
Отправить комментарий