Недавно я слышал, что Nginx добавил кеширование в функцию обратного прокси. Я оглянулся, но не смог найти много информации об этом.
Я хочу настроить Nginx в качестве обратного кеширующего прокси-сервера перед Apache / Django: иметь прокси-запросы Nginx для некоторых (но не всех) динамических страниц к Apache, затем кэшировать сгенерированные страницы и обслуживать последующие запросы этих страниц из кеша.
В идеале я бы хотел сделать кеш недействительным двумя способами:
- Установить срок действия для кэшированного элемента
- Явно лишить законной силы кэшированный элемент. Например, если мой бэкэнд Django обновил определенные данные, я бы хотел сказать Nginx, что нужно сделать недействительным кеш поврежденных страниц.
Можно ли настроить Nginx для этого? Как?
proxy
nginx
reverse-proxy
varnish
продолжение
источник
источник
Ответы:
Я не думаю, что есть способ явно аннулировать кэшированные элементы, но вот пример того, как сделать все остальное. Обновление: Как упоминал Петр в другом ответе, есть модуль очистки кэша, который вы можете использовать. Вы также можете принудительно обновить кэшированный элемент, используя progin_cache_bypass от nginx - для получения дополнительной информации см . Ответ Чериана .
В этой конфигурации элементы, которые не кэшируются, будут извлечены из example.net и сохранены. Кэшированные версии будут предоставляться будущим клиентам до тех пор, пока они не станут недействительными (60 минут).
Ваши HTTP-заголовки Cache-Control и Expires будут учтены, поэтому, если вы хотите явно установить дату истечения срока действия, вы можете сделать это, установив правильные заголовки в том, к чему вы используете прокси.
Существует множество параметров, которые вы можете настроить - см. Документацию модуля прокси-сервера nginx для получения дополнительной информации обо всем этом, включая сведения о значении различных настроек / параметров: http://nginx.org/r/proxy_cache_path
источник
inactive=600m
значит? Разве неinactive
должно быть время? `[inactive=time]
Вы можете специально аннулировать кэшированные страницы через
Скажем, вы хотите кешировать страницу, установите кеш таким образом
Теперь, когда вы хотите аннулировать эту страницу и снова кешировать
Сделайте секретный вызов curl с заголовком
Это сделает недействительным и кэшировать его.
Работает от nginx 0.7.
В качестве дополнительного бонуса
add_header X-Cache-Status
можно использовать, чтобы проверить, находится ли страница из кэша или нет.источник
Я предлагаю вам попробовать Varnish . Varnish специально разработан как кеш обратного прокси. Он учитывает все заголовки управления кэшем, отправленные вами с исходного сервера, что удовлетворяет вашему первому запросу.
Для вашего второго запроса явная недействительность. Я настоятельно рекомендую изменить имя URL ресурса, который вы хотите аннулировать, либо переименовав файл, либо воспользовавшись какой-либо формой разгона кэша строки запроса. В Varnish есть
PURGE
операция, которая удалит ресурс из кеша Varnish, но не даст вам контроля над другими кешами между вами и пользователем. Как вы сказали, что хотите явно очистить ресурс, тогда стандартные заголовки управления http вам не помогут. В этом случае самый надежный способ обойти кеширование ресурса - это переименовать его.источник
style.v123.css
потому что некоторые кеши не будут кешировать запросы, содержащие строку запроса.Для аннулирования выбранных страниц вы можете использовать патч «cache_purge» для nginx-0.8.x, который делает именно то, что вы хотите;)
Это доступно здесь .
источник
Большинство инструментов кэширования (Citrix) позволяют принудительное обновление (Ctrl + r) для повторного заполнения кэшированной страницы.
Вот трюк, который я нашел, чтобы сделать что-то похожее в nginx.
Это предполагает, что когда вы делаете Ctrl + r в вашем браузере, заголовок Cache-Control имеет max-age = 0 в своем запросе. Я знаю, что Chrome делает это, но я не пробовал в других браузерах. Добавить больше полей заголовка можно просто, просто добавив больше операторов if, которые устанавливают
$eac
переменную в 1.источник
Кэширование - довольно новая функция в nginx (и пока не очень хорошо документированная), но достаточно стабильная для использования в производстве.
Используйте английскую документацию
Спросите в списках рассылки
Переведите русскую документацию с чем-то вроде Google Translate
Использовать лак
источник
Я считаю, что NginxHttpProxyModule способен обрабатывать http-запросы. Ищите директивы, начинающиеся с:
Да, можно контролировать поведение кэша с помощью таких директив:
источник
Исходя из того, что вы не можете найти на нем документы, я бы немного опасался полагаться на него в процессе производства. Вы рассматривали лак? Это мой "nginx обратных прокси", маленький, легкий, выполняющий одну работу и выполняющий ее хорошо.
источник
Если вы используете eTags в своем приложении и ставите nginx перед ним, тогда он позаботится об истечении срока действия, потому что, если eTag изменится, это сделает кеш недействительным.
источник
Вы можете контролировать срок действия кэша Nginx с помощью нескольких директив / параметров:
proxy_cache_valid 200 302 10m;
Expires
Cache-Control
X-Accel-Expires
inactive
параметр вproxy_cache_path
директиве:proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;
Я рекомендую мой блог, если вы хотите узнать больше о кэшировании Nginx.
Тема чистки действительно интересна, поскольку эта функция существует только в Nginx Plus (коммерческое издание Nginx). Мне очень нравится ответ @ randy-wallace. Но есть и другие возможности, такие как модуль ngx_cache_purge .
Самое простое, что вы можете сделать, это удалить кэшированный файл вручную:
сгенерируйте свой хэш-ключ:
удалить файл из файловой системы:
источник
Для будущих посетителей: Тем временем обратный прокси-сервер nginx имеет встроенное кэширование, и документы доступны по адресу:
источник
Это создает кеш для / img / location. Он находится в / opt / nginx-cache. Объекты кэшируются на 1 минуту.
Вы можете написать разные коды ответов вместо любых.
Теперь вы не можете аннулировать кеш для выбранных страниц. Возможно, в 0.8.x это будет возможно.
источник
Существует плагин nginx под названием ncache, который претендует на звание «системы веб-кэша, основанной на веб-сервере nginx. Быстрее и эффективнее, чем squid».
источник