Можно ли очистить кеш определенного URL-адреса с помощью NGINX?

0

Я использую NGINX в качестве обратного сервера, но у меня возникла проблема при внесении изменений на страницу моего веб-сайта: изменения не видны, пока я не очистил весь кеш NGINX, в результате чего он очистил весь мой сайт, а не только URL-адрес. где я работаю.

Поэтому я хотел бы знать, можно ли очистить кеш только определенного URL-адреса.

Я настроил часть динамического контента, но загрузка страницы превышает 600 мс, а когда это только статический контент, она загружается за 200 мс.

Я использовал эту командную строку в своем терминале, но она тоже не сработала

      grep -lr 'https://example.com/blog/name-of-blog.php$' /var/cache/nginx/*

Также я уже пытался настроить из файла .htaccess, но все пошло не так, как я ожидал.

Я надеюсь, что вы можете мне помочь.

2 ответа

В текущих версиях nginx файл кэша имеет строку, начинающуюся сKEY: , который содержит ключ объекта, хранящегося в файле кэша.

Значение ключа по умолчанию описано в документации nginx , и оно

      $scheme$proxy_host$request_uri

Из документации переменных nginx мы видим, что$request_uri— это полный URI запроса с аргументами.

Если ваш запрос именно наhttps://example.com/blog/name-of-blog.php, то ваша команда выше должна найти правильный файл.

Однако если URL-адрес содержит аргументы запроса, их необходимо включить в строку поиска или удалить$чтобы выполнить сопоставление префикса.

Также обратите внимание, что nginx по-прежнему пытается получить доступ к кешированной версии файла после удаления и выдает сообщения журнала, когда не может открыть кешированный файл.

Поэтому полезноreloadnginx после удаления файлов из кеша.

Да, вы просто делаете это неправильно - используете слишком сложный шаблон. Ключ кэша , под которым будет храниться запись, зависит от значенияproxy_cache_keyпеременная, но самый простой способ — не пытаться вычислить ее вручную, а просто просмотреть реальные кэш-файлы в вашем дереве кэша, исправить шаблон поиска и выполнить поиск правильно.

Глядя на твойgrepключи - я бы так сказал

  • вы используете регулярные выражения, но их нет-e
  • более того, вам, вероятно, вообще не нужны регулярные выражения

Я бы начал с поиска имени виртуального хоста, а затем сузил поиск до фактического URI, если он вам нужен.

А потом что-то вроде

grep -R <the pattern you figured out> /var/cache/nginx | awk '{print $1}' | xargs -I % rm %

Другие вопросы по тегам