我有一个相当大且速度较慢(复杂数据,复杂前端)的 Web 应用程序内置RoR
并作为反向代理Puma
提供服务。nginx
查看nginx
错误日志,我看到很多条目,例如:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
我很好奇,因为对于不同的用户和不同的用户交互,页面不太可能保持不变,而且我认为在磁盘上缓冲响应不是必要/有用的。
我知道proxy_max_temp_file_size
并将其设置为 0,但在我看来有点尴尬(我的代理尝试缓冲但没有文件可以缓冲到...怎么能更快?)。
我的问题是:
如何删除 [warn] 并避免缓冲响应?关闭
proxy_buffering
还是设置proxy_max_temp_file_size
为0更好?为什么?如果
nginx
缓冲响应:它何时为缓冲的响应提供服务,向谁提供服务,为什么?为什么默认
nginx
打开proxy_buffering
,然后如果它确实缓冲了响应,则向您发出警告?响应何时触发该选项?何时需要>几秒钟(多少?)来提供响应?这是可配置的吗?
TIA,NGW。
您应该设置
proxy_max_temp_file_size
为 0 才能将其删除。该proxy_buffering
指令与警告没有直接关系。您可以将其关闭以完全停止任何缓冲,但通常不建议这样做(除非Comet需要它)。它会立即提供响应,但客户端的连接速度通常要慢得多,并且无法像应用程序生成响应数据那样快地使用响应数据。Nginx 尝试缓冲整个响应以尽快释放您的应用程序。
另见:http ://aosabook.org/en/nginx.html
正如我已经提到的,
proxy_buffering
与警告没有直接关系。优化代理操作通常需要它,关闭它会降低性能和吞吐量。Nginx 仅在响应不适合配置的内存缓冲区时向您发出警告。如果对您没问题,您可以忽略该警告。
它在内存缓冲区已满时触发。请看文档,解释了整个机制:http: //nginx.org/r/proxy_max_temp_file_size
您可能想要增加内存缓冲区。
以下配置在我的服务器上运行良好。