У меня есть простое веб-приложение, работающее за nginx с использованием flask + gunicorn, и где-то по ходу кешируется устаревшая версия страницы. Моя конфигурация nginx имеет add_header Cache-Control no-cache;
и proxy_buffering off;
в том месте, где прокси проходит. Я поискал и обнаружил, что сам Gunicorn ничего не кеширует. Мое приложение также ничего не кеширует, или, по крайней мере, я этого не писал.
server {
listen 80;
server_name mywebsite.com;
location / {
add_header Cache-Control no-cache;
proxy_pass http://127.0.0.1:6789;
proxy_set_header Host $host;
proxy_buffering off;
}
}
Это конфигурация nginx, которую я использую, и Gunicorn был запущен с gunicorn -b 127.0.0.1:6789 -w 5 app:app
и никаких специальных конфигов для него не ставилось.
Любая помощь в диагностике проблемы была бы замечательной. Спасибо!
изменить: вот заголовки ответа на запрос, возвращающий устаревшую страницу.
Age: 0
Cache-Control: no-cache
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 27 Jun 2016 14:27:29 GMT
Server: nginx/1.8.0
Transfer-Encoding: chunked
Статические вещи вроде отправки файлов?
"вернуть send_file ('mypage.html')"?
Этот тип одностраничных вложений по умолчанию кэшируется в flask.
Решение было: app.config.update (SEND_FILE_MAX_AGE_DEFAULT = 0)
У меня есть настройка, в которой я возвращаю только html-страницы во флягу (они содержат angular, поэтому я не делаю никакого кода во фляжке. Gunicorn + nginx для его размещения и nginx для статики, отличной от HTML (js, css, изображения шрифтов и т. Д.) . Ничего не кешируется после того, как эта опция была установлена, поэтому маловероятно, что это ваш gunicorn или nginx (но кто знает, я не эксперт по ним, и, возможно, у вас есть другая версия, чем я, где они кешировали). Так что может быть ваша фляжка, в зависимости что ты с ним делаешь Я управляю 4 рабочими-пулеметчиками.
Я пришел к выводу, что, поскольку Gunicorn создает рабочие потоки, один или несколько из них не имеют рабочих потоков обновления цен и застревают с устаревшими результатами. Сейчас я использую Gunicorn только с одним рабочим, что, кажется, не дает возможности использовать его, но неважно.