我有一个相当庞大而慢的(复杂的数据,复杂的前端)Web应用程序在RoR中构build,由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,但在我看来,我有点尴尬(我的代理尝试缓冲,但没有文件在哪里缓冲…怎么会更快?)。
我的问题是:
1)如何删除[警告]并避免缓冲响应? closuresproxy_buffering或者将proxy_max_temp_file_size设置为0会更好吗? 为什么?
2)如果nginx在缓冲响应的时候缓冲了一个响应,谁又为什么?
3)为什么nginx默认打开proxy_buffering,然后[警告]你是否实际缓冲了一个响应?
4)响应何时触发该选项? 何时需要超过几秒钟(多less次?)才能提供响应? 这是可configuration的吗?
TIA,恩
1)如何删除[警告]并避免缓冲响应? closuresproxy_buffering或者将proxy_max_temp_file_size设置为0会更好吗? 为什么?
您应该将proxy_max_temp_file_size
设置为0才能将其删除。 proxy_buffering
指令与警告没有直接关系。 你可以把它关掉以停止任何缓冲,但是这通常不被推荐(除非Comet需要它)。
2)如果nginx在缓冲响应的时候缓冲了一个响应,谁又为什么?
它立即服务,但客户端通常连接速度非常慢,不能像应用程序产生的那样快速地使用响应数据。 Nginx尝试缓冲整个响应,以尽快释放您的应用程序。
另见: http : //aosabook.org/en/nginx.html
3)为什么nginx默认打开proxy_buffering,然后[警告]你是否实际缓冲了一个响应?
正如我已经提到的, proxy_buffering
与警告没有直接关系。 通常需要优化代理操作并将其closures,从而降低性能和吞吐量。
Nginx只在响应不符合configuration的内存缓冲区时才会发出警告。 如果你没有问题,你可以忽略这个警告。
4)响应何时触发该选项? 何时需要超过几秒钟(多less次?)才能提供响应? 这是可configuration的吗?
当内存缓冲区满时触发。 请看文档,整个机制解释: http : //nginx.org/r/proxy_max_temp_file_size
您可能需要增加内存缓冲区。
以下configuration在我的服务器上正常工作。
proxy_buffers 16 16k; proxy_buffer_size 16k;