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

Nginx: обновлять кеш только в случае изменения файла - возможно?

Я использую nginx как обратный прокси и для кеширования. В настоящее время кеш для местоположения «/ test» будет обновляться каждые 2 часа: «proxy_cache_valid 200 302 301 304 2h;»

Можно ли обновлять кеш только при изменении файла?

Спасибо!

Я предполагаю, что мы говорим о сгенерированном контенте, который еще не является статическим файлом на вашем веб-сервере (статические файлы на вашем веб-сервере обычно достаточно быстрые).

Главный вопрос - как сообщить Nginx, что кешированный контент был изменен.

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

Лучше всего очищать контент, если он был обновлен (например, был изменен в вашей CMS). Очистка - это процесс аннулирования кешированных объектов. Nginx поддерживает очистку только в версии NginxPlus. Однако вы можете сделать почти то же самое, перезагрузив кешированный объект.

Вот простая инструкция:

Конфигурация Nginx

...

# default location
location / {
    try_files                   $uri @php;
}

# PHP handler
location @php {
    try_files                   $uri /index.php;

    access_log                  /var/log/nginx/access.log;

    # include fastcgi_params
    include                     fastcgi_params;

    # how to connect to PHP-FPM
    fastcgi_pass                php-fpm;

    # enable caching
    fastcgi_cache               phpfpm;

    # don't look for existing cache objects with HTTP header X-Purge
    fastcgi_cache_bypass        $http_x_purge;
}

...

Curl, чтобы удалить один документ

curl https://example.com/site1/overview.jpeg -s -H "X-Purge: true"

Это должно выполняться в общем за вас.

Если файл кэшируется в браузере, и браузер снова запрашивает этот файл, и файл был удален из кеша сервера, сервер все равно будет смотреть на if-modified-since заголовок в запросе.

Сервер проверит это значение даты и времени, и если он определит, что никаких изменений не произошло, сервер отправит 304 ответ, который сообщает браузеру, что можно загрузить кэшированную версию, а фактический объект не является сервером и загружается снова.

Если значение изменено, объект будет сервером и копия кеша будет обновлена.

https://www.keycdn.com/support/if-modified-since-http-header

IMHO, кеширование - это то, что вам действительно нужно контролировать Cache-Control заголовки, а не конфигурация сервера.

Параметры конфигурации сервера используются для обеспечения отказоустойчивости, когда Cache-Control не существует или настроен нелогично.