Nginx и НЕкеширование index.html

Надоело, что после выката апдейта пользователи его не видят? Устали от бесполезного занятия научить своих клиентов чистить кеш?

Тогда вы по адресу!

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

    location / {
        try_files $uri @index;
    }

    location @index {
        add_header Cache-Control no-cache;
        expires 0;
        try_files /index.html =404;
    }

Директива try_files по порядку проверяет наличие указанных файлов и отдает первый существующий. Таким образом, если пользователь пройдет в корень ему будет отдан @index

Знак @ означает именованный location. Такой location используется не для обычной обработки запросов, а для того, чтобы на него можно было сослаться в других блоках.

Директива add_header указывает nginx-у добавлять указанный хедер в ответ. В данном случае это Cache-Control=no-cache.

Согласно документации данную директиву браузер воспринимает следующим образом:

no-cache

The no-cache response directive indicates that the response can be stored in caches, but must be validated with the origin server before each reuse — even when the cache is disconnected from the origin server.

Таким образом, перед каждым использованием файла из кеша браузер проверит, не изменился ли файл на сервере, и, если изменился, подтянет новый.

Таким образом, index.html "залипать" не будет.

Есть также еще много других файлов, которые браузер будет кешировать. Но тут, к счатью, например, сборщик npm при каждой сборке генерит js-скрипты с разными названиями. Т.е. index.html будет ссылаться на разные скрипты, и тут проблем с кешем также не будет.