本文主要是介绍nginx中多个server块共用upstream会相互影响吗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这篇文章的最新版请看我的另一个博客:https://www.cnblogs.com/NetRookieX/p/17959533
背景
nginx中经常有这样的场景,多个server块共用一个域名。
如:upstream有2个以上的域名,nginx配置两个server块,共用一个upstream配置。
那么,如果其中一个域名发生"no live upstreams while connecting to upstream"错误,会不会影响另一个域名呢?
先说结论
会。导致另一个域名会返回5xx,并且也报错"no live upstreams while connecting to upstream"
模拟错误"no live upstreams"
环境
机器 | ip | 作用 |
---|---|---|
test1 | 192.168.10.129 | nginx代理服务器 |
test2 | 192.168.10.130、192.168.10.150 | upstream服务器(用nginx模拟) |
test1配置(角色:nginx代理)
配置域名解析:
vim /etc/hosts# 将域名解析到本机,待会儿在本机测试127.0.0.1 test1.com127.0.0.1 test2.com
nginx配置:
error_log /var/log/nginx/error.log;
server {listen 80;listen [::]:80;server_name test1.com;location /test {proxy_set_header Host $host;proxy_next_upstream http_502; # 关键配置:遇到502,则尝试下一个upstream serverproxy_pass http://test;}
}
server {listen 80;listen [::]:80;server_name test2.com;location /test {proxy_set_header Host $host;proxy_pass http://test;}
}
upstream test {server 192.168.10.130 max_fails=1 fail_timeout=15s;server 192.168.10.150 max_fails=1 fail_timeout=15s;
}
test2配置(角色:upstream)
server {listen 80;listen [::]:80;server_name test1.com;location /test {return 502 "test1.com"; # 关键配置:返回502,模拟错误}
}
server {listen 80;listen [::]:80;server_name test2.com;location /test {return 200 "test2.com";}
}
测试
在哪里测试?test1
curl -i http://test2.com/test # 快速运行多遍,发现不报错。
curl -i http://test1.com/test # 快速运行多遍,观察/var/log/nginx/error.log会报错:"no live upstreams"
curl -i http://test2.com/test # 报错后,立即执行此命令。发现也报错了。
得出结论:nginx中多个server块共用upstream会相互影响
那年,郭少在京城
这篇关于nginx中多个server块共用upstream会相互影响吗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!