Как очистить кеш nginx? - PullRequest
219 голосов
/ 04 июня 2011

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

Я попытался перезапустить nginx, но безуспешно, и у меня есть Googleне найден правильный способ его очистки.

В некоторых статьях говорится, что мы можем просто удалить каталог кэша: var/cache/nginx, но на моем сервере такого каталога нет.

Что мне делатьсейчас?

Ответы [ 20 ]

175 голосов
/ 29 октября 2012

У меня была точно такая же проблема - я запускал свой nginx в Virtualbox.У меня не было включено кэширование.Но похоже, что sendfile было установлено на on в nginx.conf, и это вызывало проблему.@kolbyjack упомянул это выше в комментариях.

Когда я выключил sendfile - все работало нормально.

Это потому что:

Sendfile используется для «копирования данных между одним дескриптором файла и другим» и, по-видимому, имеет некоторые реальные проблемы при запуске в среде виртуальной машины или, по крайней мере, при запуске через Virtualbox.Отключение этой конфигурации в nginx приводит к тому, что статический файл обслуживается другим способом, и ваши изменения будут отражены немедленно и без вопросов

Это связано с этой ошибкой: https://www.virtualbox.org/ticket/12597

92 голосов
/ 21 мая 2014

Вы также можете обойти / повторно кэшировать файл за файлом, используя

proxy_cache_bypass $http_secret_header;

и в качестве бонуса вы можете вернуть этот заголовок, чтобы увидеть, получили ли вы его из кэша (вернет «HIT») или с сервера контента (вернет «BYPASS»).

add_header X-Cache-Status $upstream_cache_status;

для истечения срока действия / обновления кэшированного файла, используйте curl или любой другой клиент для отправки запроса на кэшированную страницу.

curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"

это вернет свежую копию элемента, а также заменит то, что находится в кеше.

56 голосов
/ 01 августа 2011

Если вы не настроили зону кэша с помощью proxy_cache_path , а затем использовали ее (например, в блоке местоположения), через: proxy_cache ничего не будет кэшировано.

Если вы сделали, однако, то , по словам автора nginx , достаточно просто удалить все файлы из каталога кэша.

Самый простой способ: find /path/to/your/cache -type f -delete

20 голосов
/ 14 июля 2011

Вы можете удалить каталог кеша nginx или Вы можете искать конкретный файл:

grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*

И удалите только один файл, чтобы nginx обновил их.

15 голосов
/ 06 декабря 2012

В этом вопросе два ответа.

  • Один для nginx в качестве обратного кэша
  • Другой для очистки кэша браузера с помощью ввода заголовка (этот)

Использование:

expires modified +90d;

EG:

location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
    access_log off;
    root /path/to/htdocs;
    expires modified +90d;
}
10 голосов
/ 20 октября 2013

Я нашел это полезным

grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm

Поиск, а если найден, то удалить.

10 голосов
/ 03 февраля 2012

В моей установке nginx я обнаружил, что должен был перейти на:

/opt/nginx/cache

и

sudo rm -rf *

в этом каталоге. Если вы знаете путь к вашей установке nginx и можете найти каталог кеша, то это может сработать для вас. Будьте очень осторожны с командой rm -rf, если вы находитесь не в том каталоге, вы можете удалить весь жесткий диск.

7 голосов
/ 24 марта 2017

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

#!/bin/bash
sudo service nginx stop
sudo rm -rf /var/cache/nginx/*
sudo service nginx start | mail -s "Nginx Purged" me@gmail.com
exit 0
5 голосов
/ 18 сентября 2015

Для тех, у кого другие решения не работают, проверьте, используете ли вы службу DNS, такую ​​как CloudFlare .В этом случае активируйте «Режим разработки» или используйте инструмент «Очистить кэш».

5 голосов
/ 02 февраля 2016

Обратите внимание, что proxy_cache_bypass может навредить вам, если ваше приложение не вернет кэшируемый ответ на тот конкретный запрос, где вы его инициировали.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...