在网站页面之间切换时会显示 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;