页面未缓存

页面未缓存

我有一个简单的 Web 应用程序,使用 flask+gunicorn 在 nginx 后面运行,在某个地方,页面的旧版本被缓存了。我的 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

答案1

像发送文件这样的静态内容?

“返回 send_file('mypage.html')”?

默认情况下,这种类型的单行代码已缓存在 Flask 中。

解决方案是:app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)

我得到了一个设置,其中我只在 flask 中反馈 html 页面(它们包含 angular,所以我不在 flask 中编写任何代码。Gunicorn + nginx 用于托管它,nginx 用于非 html 静态(js、css、字体图像等)。设置该选项后没有任何缓存,所以不太可能是你的 gunicorn 或 nginx(但谁知道呢,我不是它们方面的专家,也许你得到了其他版本,它们确实缓存了)。所以可能是你的 flask,取决于你用它做什么。我运行了 4 个 gunicorn 工作者。

答案2

我得出的结论是,由于 gunicorn 创建了工作线程,因此一个或多个没有有效的价格更新线程,结果被卡在了过时的结果中。我现在只用一个工作线程运行 gunicorn,这似乎违背了使用它的目的,但无论如何。

相关内容