nginx connect()失败(110:连接超时)

时间:2016-02-25 03:04:44

标签: mysql nginx centos reverse-proxy

我知道,这个问题已在不同的论坛上被多次询问,但我仍无法找到解决方案,这解决了我的问题......情况:我们有一个nginx,php-fpm和MySQL堆栈在服务器上。服务器位于nginx反向代理后面。问题是在上游服务器上有干净的错误日志,在反向代理上我收到多条消息

  

connect()失败(110:连接超时),同时连接到>上游,客户端:+++++++++++服务器:domain.com,请求:" GET> / files / imagecache / FrontBullet / blog1 / dknasda.jpg HTTP / 1.1",上游:>" http://192.168.158.142:80/files/imagecache/FrontBullet/blog1/dknasda.jpg>",主持人:" somedomain.com&#34 ;

由于某种原因,对于不同的资源或文件,此错误每1-5分钟发生一次。

反向代理上的我的nginx配置如下:

    user ++++;
worker_processes 3;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   60s; #keeps the connection open with the client; MS default is 60.
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    gzip on; 
    gzip_http_version 1.1; 
    gzip_vary on; 
    gzip_comp_level 6; 
    gzip_proxied any; 
    gzip_types text/plain  text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; 
    gzip_buffers 16 8k; 
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    upstream main_upstream {

        server 192.168.158.142:80 max_fails=3  fail_timeout=60s;  #       New Server. Sent to 192.168.90
#   server 192.168.158.143:80;   #       HSB
    keepalive 32;
    }

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  domain.com;

    location / {
        proxy_buffers 32 32k;
        proxy_buffer_size 64k;
        proxy_pass http://main_upstream;
        proxy_set_header    Host $host;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    X-Forwarded-By $server_addr:$server_port;
            proxy_set_header    X-Real-IP $remote_addr;
        proxy_connect_timeout       600s;
        proxy_send_timeout          600s;
        proxy_read_timeout          600s;
        send_timeout                600s;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        client_max_body_size                            32M;
        client_body_buffer_size                         512k;
    }
    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

任何想法为什么会发生这种情况?我正在使用centos 7.1 abd nginx 1.6.3

提前致谢, 托多尔

2 个答案:

答案 0 :(得分:1)

终于找到了原因,现在它已经干了好几个小时了。原来有两个重叠的问题。第一个是队列满后内核丢弃请求。这是一本关于调整内核linux内核参数的好手册 - https://www.nginx.com/blog/tuning-nginx/

问题出现后,我们将网站迁移到新服务器并使用DHCP分配IP地址 - BIG MISTAKE。每小时左右,dhcp重新启动网络接口。检查整个系统日志,我注意到网络接口的IP会定期重新分配。这些间隔与日志中的错误突发相吻合。所以解决方案是回到静态IP。

答案 1 :(得分:0)

你有一个像这样的上游区块:

upstream main_upstream {
    server 192.168.158.142:80 max_fails=3  fail_timeout=60s;  # New Server. Sent to 192.168.90
#   server 192.168.158.143:80;   #       HSB
    keepalive 32;
    }

第一行从192.168.158.142:80获取请求,并在3次失败后停止尝试60秒。 第二行被注释掉了,所以它不起作用。 此外,您的其他评论中还列出了其他IP,这显然不起作用。

假设您要从192.168.158.142:80获取请求并在故障转移到另一个IP 192.168.158.143:80时失败,则执行此操作:

upstream main_upstream {
        keepalive 30;
        server 192.168.158.142:80;        # main server
        server 192.168.158.143:80 backup; # failover
}

或者,如果您想以循环方式均匀分配负载:

upstream main_upstream {
        keepalive 30;
        server 192.168.158.142:80; # server 1
        server 192.168.158.143:80; # server 2
}

在这两种情况下,请确保您可以同时访问192.168.158.142:80192.168.158.143:80

另外请记住,您正在使用keepalive,这意味着如果您的后端服务器设置为以任何方式限制请求,他们可能会开始拒绝向您的前端nginx提供请求(我将假设这是您的负载均衡器)