我有一个使用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
发送文件之类的静态内容?
“返回发送文件('mypage.html')”?
默认情况下,在烧瓶中为我缓存的那种单线器。
解决方案是:app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
我有一个设置,我只在烧瓶中反馈 html 页面(它们包含角度,所以我不在烧瓶中做任何代码。Gunicorn + nginx 用于托管它,nginx 用于非 html 静态(js、css、字体图像等) . 设置该选项后没有缓存,所以不太可能是你的 gunicorn 或 nginx (但谁知道,我不是他们的专家,也许你有其他版本,而不是我,他们缓存的地方)。所以可能是你的烧瓶,取决于你用它做什么。我管理着 4 个 gunicorn 工人。
我得出的结论是,由于 gunicorn 创建了工作线程,因此一个或多个没有工作价格更新线程并陷入陈旧的结果。我现在只用一名工人运行 gunicorn,这似乎违背了使用它的目的,但无论如何。