Nginx: Обновлять кэш только если файл изменился — возможно?

Nginx: Обновлять кэш только если файл изменился — возможно?

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

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

Спасибо!

решение1

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

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

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

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

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

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

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

решение2

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

Главный вопрос заключается в том, как сообщить 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 https://example.com/site1/overview.jpeg -s -H "X-Purge: true"

Связанный контент