nginx:连接到上游时没有实时上游

nginx:连接到上游时没有实时上游

在网站页面之间切换时会显示 502 网关错误,有时在主页上会显示,但不是主页上的第一次请求,只有当另一个页面重定向到它时才会显示。并且它发生在一些 javascript 文件中

在两个上游php1和php2上配置负载平衡,两者都是apache服务器。

当我检查错误日志时,我发现:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"

这是负载平衡服务器配置

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        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_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

我搜索了几个小时,没有任何有用的信息,发现我的流已启动并且没有问题。

答案1

这不是 Nginx 的问题,而是你的 PHP 后端没有及时响应的问题。你可以添加日志记录到 Nginx 以帮助确认这一点

作为第二个参考点,您可以top在服务器上手动检查 PHP 是否在一段时间内占用大量 CPU,这是响应缓慢的另一个指标。

如果您可以接受 PHP 的响应速度非常慢,您可以要求 Nginx 等待更长时间再放弃:

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

通过检查上面链接的带有时间信息的日志,您应该能够找出哪些请求对于 PHP 来说处理很慢。

为了缩小问题范围,请将这些请求直接发送到 PHP 后端。

根据发生的情况,您可能还可以在 Nginx 中启用某些请求的缓存,以避免一些缓慢的请求。

答案2

不知道是否完全相同,但对我有用的是在服务器名称末尾添加 max_fails = 0

上游 sm_url { 服务器 LOAD_BALANCER_DOMAIN_NAME: max_fails=0; }

答案3

将上游重命名为“up_example.com”并更改

proxy_pass  http://$server_name/$uri;

proxy_pass  http://up_$server_name$uri;

相关内容