Nginx容灾 proxy_next_upstream 配置无效

zhaodongxx 软件开发工程师  2017-11-06 04:29:35
我正在测试nginx容灾:期望上游服务器响应超时后nginx可以把请求分发给另一个上游服务器,部分配置如下:
其中proxy_read_timeout 3s;,表示上游服务器响应超过三秒就返回,
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;表示上游服务器返回异常就会分发给其他上有服务器.但是测试失败了,一旦一台服务器超时,那么nginx就直接返回了,并不会分发给其他服务器.从而实现容灾.
不知道我说清楚没?
我的疑问就是为什么nginx没有分发给另一台上游服务器.

#设定负载均衡的服务器列表
upstream minds {
#weight为服务器权重,权值越高被分配到的几率越大,max_fails最大超时次数,fail_timeout服务器代理被挂起的时间
#ip_hash;
server 192.168.2.117:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8080 weight=99 max_fails=2 fail_timeout=30s;
}

server {
listen 8000;
server_name 127.5.5.5 www.minds.mlrkon.com;

location /ngx_status
{
stub_status on;
access_log off;
#allow 127.0.0.1;
#deny all;
}
# charset koi8-r;

# access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://minds;

proxy_redirect off;
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1s;
proxy_send_timeout 30s;
proxy_read_timeout 3s;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
}
...全文
1550 1 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
业余草 2017-11-11

回复
zhaodongxx 2017-11-08
使用1.8.6版本就可以正常使用了,此贴完结
回复
zhaodongxx 2017-11-07
引用 4 楼 xiyi5609 的回复:
可能是你服务器的监听接口有问题,都改成一致的试试。
我的Nginx服务器和其中一台上游服务器在同一台机子上,今天我把他们分别放在三台机子上测试一下.
回复
zhaodongxx 2017-11-07
引用 3 楼 xiyi5609 的回复:
我觉得看你的报错结果应该是 两台服务器之间没有建立链接,就是你的上有服务器跟你报错的服务器之间的链接问题。
我没有理解你的意思. 我可以保证Nginx与两台上游服务器得通信是正常的,之所以会有上面的报错信息,是因为当Nginx访问一台上游服务器时,响应超时(因为我修改了代码,所以一定会超时),返回timeout异常,却没有分发请求至另一个上游服务器.
回复
立月尽黄昏 2017-11-06
可能是你服务器的监听接口有问题,都改成一致的试试。
回复
立月尽黄昏 2017-11-06
我觉得看你的报错结果应该是 两台服务器之间没有建立链接,就是你的上有服务器跟你报错的服务器之间的链接问题。
回复
zhaodongxx 2017-11-06
@立月尽黄昏
回复
zhaodongxx 2017-11-06
配置文件如下

#user  nobody;
worker_processes  auto;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #设定负载均衡的服务器列表
    upstream minds {
        #weight为服务器权重,权值越高被分配到的几率越大,max_fails最大超时次数,fail_timeout服务器代理被挂起的时间
        #ip_hash;
        server 192.168.2.117:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 127.0.0.1:8080 weight=99 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       8020;
        server_name  127.5.5.5;

        location / {
            root   html;
            index  index.html index.htm;

            proxy_pass       http://minds;
            #proxy_redirect off;
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_connect_timeout   1s;
            proxy_send_timeout   30s;
            proxy_read_timeout   3s;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
报错如下
2017/11/06 17:31:19 [warn] 1868#14388: *200 upstream server temporarily disabled while reading response header from upstream, client: 127.0.0.1, server: 127.5.5.5, request: "POST /api/web_search_directnew.json HTTP/1.1", upstream: "http://127.0.0.1:8080/api/web_search_directnew.json", host: "127.5.5.5:8020", referrer: "http://127.5.5.5:8020/main/index"
2017/11/06 17:31:19 [error] 1868#14388: *200 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: 127.5.5.5, request: "POST /api/web_search_directnew.json HTTP/1.1", upstream: "http://127.0.0.1:8080/api/web_search_directnew.json", host: "127.5.5.5:8020", referrer: "http://127.5.5.5:8020/main/index"
回复
发动态
发帖子
Web开发应用服务器
创建于2007-09-28

5538

社区成员

Web开发应用服务器相关讨论专区
申请成为版主
社区公告
暂无公告