Я установил nginx, и в продакшене все работает очень хорошо, но при разработке у меня иногда возникает эта проблема.
Чтобы воспроизвести проблему, я сделал следующее:
Создайте файл в общей папке с именем test.html с текстом «hello».
Откройте в браузере test.html, корректно отображает "привет".
Измените файл test.html, чтобы он содержал текст «hello world».
Загрузите веб-страницу, все еще говорит «привет».
Мое первое предположение заключалось в том, что мой браузер кэшировал это, но я попытался очистить кеш и даже использовать другой браузер или просто необработанный wget, но это все равно.
Я исследовал журналы доступа и обнаружил, что когда было внесено изменение, оно действительно было замечено, потому что есть два доступа со статусом 200, а любые последующие перезагрузки без изменений - 304.
Кроме того, сервер работает на виртуальной машине и получает файлы из связанной папки, поэтому я подозревал, что, возможно, виртуальная машина не может правильно увидеть файл, но загрузка его в виртуальную машину показывает, что изменения в порядке.
Перезапуск nginx тоже не помогает. Перезагрузка всей виртуальной машины выполняется, но было бы ужасно делать это каждый раз. Новые файлы отображаются нормально, просто модификация существующих файлов вызывает затруднения. Насколько мне известно, я не настраивал никакого кеширования.
Я подозреваю, что nginx выполняет какое-то кеширование либо на диске, либо в памяти, и, несмотря на то, что замечает, что файл изменился, он по-прежнему возвращает старую кешированную версию, когда ее спрашивают.
Ищете возможные решения?
--Обновить--
Я просмотрел файлы конфигурации и обнаружил то, чего не понял, что выглядело подозрительно:
sendfile on;
Комментарий к этой строке устраняет проблему. Может кто-нибудь объяснить, что это лучше, чем http://articles.slicehost.com/2007/12/13/ubuntu-gutsy-nginx-configuration-1/ ?
--Обновление 2--
Информация добавлена в вики Nginx: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#config-changes-not-reflected