upstream模块主要用来配置上游服务器,(之所以称为上游服务器,是因为响应的数据是由upstream里配置的后端服务器传输过来的,属于响应数据的上游),nginx配置集群就是由upstream完成的,upstream模块在http模块下进行配置。实例如下:
upstream tomcats {
server 192.168.40.22:8088;
server 192.168.40.23:8088;
server 192.168.40.24:8088;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats; #这里用到的tomcats就是upstream模块定义的名称
}
}
轮询与加权轮询的内容,在链接对应文章中又介绍 https://blog.csdn.net/b15735105314/article/details/106982811。
(1)max_conns(最大连接数):限制每台server的连接数,用于保护避免过载,可起到限流作用。如果当前所有服务器的连接数达到max_conns指定的最大连接数,那么nginx便为新的请求响应502 bad gateway(nginx其实就是一种网关)。
upstream tomcats {
server 192.168.1.173:8080 max_conns=2;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
上面实例的max_conns的值指定为2是为了方便测试,实际的环境所能承受的连接数量要根据具体服务器的硬件指标去指定。
(2)slow_start(缓慢启动):这个参数在商业版本才能使用。
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
server 192.168.1.174:8080 weight=2;
server 192.168.1.175:8080 weight=2;
}
该参数不能使用在hash
和random 这两种负载均衡方式
中,即只能用在加权负载均衡方式中。
如果在 upstream 中只有一台 server,则该参数失效。
(3)down:用于标记服务节点不可用:
upstream tomcats {
server 192.168.1.173:8080 down;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
这个时候如果有请求到来时,nginx是不会把请求转发到173这个节点上的。
(4)backup:表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:
upstream tomcats {
server 192.168.1.173:8080 backup;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
backup
参数不能使用在hash
和random 负载均衡方式
中。
(5)max_fails 和 fail_timeout
max_fails
:表示失败几次,则标记server已宕机,剔出上游服务。 fail_timeout
:表示失败的重试时间。
假设目前设置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
这里设置的是nginx到后端服务器的长连接,并不是客户端到nginx的长连接。
keepalived
: 设置长连接处理的数量proxy_http_version
:设置长连接http版本为1.1proxy_set_header
:清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
# 设置Connection为空串,以禁止传递头部到后端
# http1.0中默认值Connection: close
proxy_set_header Connection "";
}
}
# 默认情况下 Nginx 访问后端都是用的短连接(HTTP1.0),一个请求来了,Nginx 新开一个和后端的连接,
# 请求结束连接回收。HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以# 传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
这里对nginx的长连接只简单介绍,后面会有专门的一片文章介绍nginx的长连接问题。