Nginx和mysql超时 - 上游超时(110:连接超时)

时间:2013-01-05 02:20:56

标签: python mysql nginx uwsgi

我的堆栈是带有gevent循环,烧瓶,mysql和python mysql.connector的uWSGI我可以进行异步mysql查询。 Lateley我在运行查询时在nginx日志中遇到以下错误。完成查询最多可能需要60秒。查询工作在堆栈的外侧。当我在我的笔记本电脑上本地运行使用内置的烧瓶dev服务器并在世界各地的中途点击mysql服务器..它的工作原理。所以......我假设一个nginx配置问题。

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;
             }

1 个答案:

答案 0 :(得分:3)

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


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

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