2013-01-05 96 views
0

我的堆栈是uWSGI与gevent循环,瓶,mysql和python mysql.connector s我可以做异步mysql查询。 Lateley当我运行查询时,我在nginx日志中得到了下面的错误。查询可能需要60秒才能完成。查询工作在堆栈的外侧。当我在我的笔记本电脑上本地运行使用内置的烧录开发服务器,并在世界各地的中间点击mysql服务器时。所以..我假设一个nginx配置问题。Nginx的,和MySQL超时 - 上游超时(110:连接超时)

2013/01/05 01:49:48 [error] 7267#0: *2878 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: 127.0.0.1, request: "GET /ajax_grid?date_from=2013-01-02&date_to=2013-01-04&rt=crpr&a_dhx_rSeed=1357350534901 HTTP/1.1", upstream: "uwsgi://127.0.0.1:6000", host: "test.com", referrer: "http://test.com/" 

以下是我对nginx的相关选项。我应该调整以避免出现错误?

sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 65; 
keepalive_requests 100000; 
types_hash_max_size 2048; 
proxy_read_timeout 200; 
reset_timedout_connection on; 
client_body_timeout 60; 
send_timeout 2; 
# server_tokens off; 
# server_names_hash_bucket_size 64; 
# server_name_in_redirect off; 

server { 
     listen 80; 
     server_name 127.0.0.1; 



    location/{ 
        include uwsgi_params; 
        uwsgi_buffering off; 
        #uwsgi_param X-Real-IP $remote_addr; 
        #uwsgi_param Host $http_host; 
        #uwsgi_pass uwsgi_dashboard; 
        uwsgi_pass 127.0.0.1:6000; 
      } 

回答

3

你可能需要设置uwsgi_read_timeout延长时间的nginx将等待来自上游服务器的数据。它的默认值是60秒。


其实,你真正需要做的是长期运行的工作转移到后台/异步任务,因为大多数HTTP客户端不愿意等待数据从服务器超过120秒;无论如何,他们会超时。使用像芹菜这样的异步处理框架,并允许客户端查询URL以查找正在运行的作业的状态,可能会取消它,并在完成后检索它。

如果您决定阻止您的wsgi容器,则可以在数据完成后使用重定向;并向客户端发送某种内容以保持连接。

+0

Waaayyyyy真棒!!!!!!!!!!!!非常感谢。这就是诀窍! – Tampa