За Nginx стоит Apache. Nginx используется для балансировки нагрузки между веб-серверами и кеширования статического контента. Единственная проблема заключается в том, что каждый раз, когда веб-приложение обновляется, мы должны полностью очищать кеш Nginx (для статического файлового кеша установлено довольно высокое значение, некоторые статические файлы часто меняются, другие нет).
Есть ли умный способ позволить Nginx периодически проверять, был ли файл изменен (примечание: Apache возвращает "Date" в заголовках ответов), поскольку файл времени был кэширован Nginx.
Вам нужно будет написать скрипт, который будет периодически сканировать ваш внутренний контент, который вы хотите кэшировать, и заставить скрипт сканировать каждый URL, который вы обновляете.
В скрипте установите HTTP-заголовок (фактический заголовок не имеет значения), а затем используйте proxy_cache_bypass чтобы заставить nginx получить его из апстрима.
Пример: ваш сценарий загрузки кеша устанавливает заголовок HTTP X-Really-Get-It: true
. В nginx.conf вы установите:
proxy_cache_bypass $http_x_really_get_it;
nginx будет извлекать файл из апстрима, а не из кеша, а затем кешировать результат.
Если вы хотите и можете использовать сторонние модули nginx, вы также можете использовать cache_purge модуль. Хотя это кажется довольно плохо задокументированным.
Просто предоставьте вашему контенту правильную информацию о кешировании - это решит проблему на вашем прокси-сервере и любых других отношениях между вами и клиентом, например
cache-control: max-age=86400; s-maxage=3600
предписывает браузерам кэшировать на 1 день, но прокси должны кешировать на 1 час.
Но лучшее решение - использовать разные URL-адреса для обновленного контента.