Я использую 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 не существует или настроен нелогично.