Можно ли очистить кеш определенного 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 по-прежнему пытается получить доступ к кешированной версии файла после удаления и выдает сообщения журнала, когда не может открыть кешированный файл.
Поэтому полезноreload
nginx после удаления файлов из кеша.
Да, вы просто делаете это неправильно - используете слишком сложный шаблон. Ключ кэша , под которым будет храниться запись, зависит от значенияproxy_cache_key
переменная, но самый простой способ — не пытаться вычислить ее вручную, а просто просмотреть реальные кэш-файлы в вашем дереве кэша, исправить шаблон поиска и выполнить поиск правильно.
Глядя на твойgrep
ключи - я бы так сказал
- вы используете регулярные выражения, но их нет
-e
- более того, вам, вероятно, вообще не нужны регулярные выражения
Я бы начал с поиска имени виртуального хоста, а затем сузил поиск до фактического URI, если он вам нужен.
А потом что-то вроде
grep -R <the pattern you figured out> /var/cache/nginx | awk '{print $1}' | xargs -I % rm %