目录
Nginx的upstream模块用于定义后端服务器组,以及与这些服务器进行通信的方式。它是Nginx负载均衡功能的核心部分,允许将请求转发到多个后端服务器,并平衡负载。
在upstream模块中,你可以定义一个或多个后端服务器,并指定每个服务器的权重、端口号等属性。通过这些设置,Nginx可以根据不同的负载均衡算法将请求转发到后端服务器。
server:定义一个后端服务器,指定服务器的IP地址和端口号。可以添加其他相关属性,如权重、最大连接数等。
upstream backend { ?
? ? server 192.168.0.100:8080; ?
? ? server 192.168.0.101:8080 weight=2; ?
}
balance:指定用于负载均衡的算法。Nginx提供了多种算法,如round-robin(轮询)、least_conn(最少连接数)等
upstream backend { ?
? ? server 192.168.0.100:8080; ?
? ? server 192.168.0.101:8080; ?
? ? balance round-robin; ?
}
failover、backup:这些指令可用于指定后端服务器的主备切换策略。当主服务器出现故障时,请求将被转发到备用服务器。
upstream backend { ?
? ? server 192.168.0.100:8080 primary; ?
? ? server 192.168.0.101:8080 backup; ?
}
sticky:该指令可用于实现会话保持功能,将同一用户的请求转发到同一后端服务器。可以通过cookie或其他机制实现会话跟踪。
以下是Sticky的工作原理:
当客户端首次发起访问请求时,Nginx会检查请求头中是否包含cookie。如果cookie不存在,Nginx将以轮询的方式将请求分发给后端服务器。
后端服务器处理完请求后,将响应数据返回给Nginx。此时,Nginx会生成一个带route的cookie,并返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。
客户端接收请求并保存带route的cookie。
当客户端下一次发送请求时,会带上route,Nginx根据接收到的cookie中的route值,将请求转发给对应的后端服务器。
通过这种方式,Sticky模块确保了同一个客户端的请求始终落在同一台服务器上,这有助于保持会话状态和数据一致性。这种机制在需要保持客户端与服务器之间持久连接的应用程序中特别有用,例如Web应用程序或实时通信系统。
ip_hash:该算法基于客户端的IP地址进行哈希计算,确保同一客户端的请求始终转发到同一后端服务器。这对于需要保持会话状态的应用程序很有用。
hash:使用自定义的哈希算法进行负载均衡。可以指定一个字符串作为键值,并根据该键值进行哈希计算来选择后端服务器。
least_conn:选择当前连接数最少的后端服务器进行处理。这种算法可以确保负载均衡更加均匀,避免某些服务器过载。
url_hash:基于URL参数进行哈希计算,并根据哈希值选择后端服务器。这种算法适用于某些特定的路由需求。
upstream backend { ?
? ? hash $request_uri; ?
? ? server 192.168.0.100:8080; ?
? ? server 192.168.0.101:8080; ?
}