连接到上游时没有上游,但是上游是可以的

时间:2016-01-31 11:24:41

标签: nginx

我对NGINX有一个非常奇怪的问题。

我有以下upstream.conf文件,上面有以下内容:

upstream files_1 {
    least_conn;
    check interval=5000 rise=3 fall=3 timeout=120 type=ssl_hello;

    server mymachine:6006 ;
}

在locations.conf中:

location ~ "^/files(?<command>.+)/[0123]" {
        rewrite ^ $command break;
        proxy_pass https://files_1 ;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在/ etc / hosts中:

127.0.0.1               localhost               mymachine

当我这样做时:wget https://mynachine:6006/alive --no-check-certificate,我得到HTTP request sent, awaiting response... 200 OK。我还验证了端口6006正在使用netstat进行监听,并且没问题。

但是当我向NGINX文件服务器发送请求时,我收到以下错误:

  

连接上游时无上游,客户端:..,请求:&#34; POST / files / save / 2 HTTP / 1.1,上游:&#34; https://files_1/save&#34;

但上游还可以。有什么问题?

2 个答案:

答案 0 :(得分:1)

定义upstream时,Nginx会对目标服务器以及可以向上或向下的内容进行处理。 Nginx根据fail_timeout(默认为10秒)和max_fails(默认为1)确定您的上游是否已关闭

因此,如果您有一些缓慢的请求超时,Nginx可以确定您上游的服务器已关闭,并且因为您只有一个,整个上游有效关闭,Nginx报告no live upstreams。这里解释得更好:

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/

我遇到了类似的问题,你可以阻止这一点覆盖这些设置。

例如:

upstream files_1 {
    least_conn;
    check interval=5000 rise=3 fall=3 timeout=120 type=ssl_hello max_fails=0;
    server mymachine:6006 ;
}

答案 1 :(得分:1)

我遇到了同样的错误 no live upstreams while connecting to upstream

我的与 SSL 相关:添加 proxy_ssl_server_name on 解决了它。

location / {
    proxy_ssl_server_name on;
    proxy_pass https://my_upstream;
  }