nginx中多个server块共用upstream会相互影响吗

发布时间:2024年01月12日

背景

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作用
test1192.168.10.129nginx代理服务器
test2192.168.10.130、192.168.10.150upstream服务器(用nginx模拟)

test1配置(角色:nginx代理)

配置域名解析:

vim /etc/hosts
	# 将域名解析到本机,待会儿在本机测试
	127.0.0.1 test1.com
	127.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 server
		proxy_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相互影响

建议

如果影响业务,那就将重要的服务的upstream分离出来。(实测不会相互影响)



那年,郭少在京城



这篇文章的最新版请看我的另一个博客:https://www.cnblogs.com/NetRookieX/p/17959533






文章来源:https://blog.csdn.net/NetRookieX/article/details/135539150
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。