# upstream 在多个应用实例间做负载均衡是一个被广泛使用的技术,用于优化资源效率,最大化吞吐量,减少延迟和容错。nginx可以作为一个非常高效的HTTP(7层)负载均衡器来分发请求到多个应用服务器,并提高web应用的性能,可扩展性和可靠性。 nginx支持以下负载均衡机制(或者方法): * round-robin/轮询: 到应用服务器的请求以round-robin/轮询的方式被分发 * least-connected/最少连接:下一个请求将被分派到活动连接数量最少的服务器 * ip-hash/IP散列: 使用hash算法来决定下一个请求要选择哪个服务器(基于客户端IP地址) ## 默认轮询(加权) ``` http { upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } } ``` 在这个配置中,每5个新请求将会如下的在应用实例中分派: 3个请求分派去srv1,一个去srv2,另外一个去srv3. ## 最小连接数 当某些请求需要更长时间来完成时,最少连接可以更公平的控制应用实例上的负载。 ``` upstream myapp1 { least_conn; server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; } ``` ## IP Hash 请注意,在轮询和最少连接负载均衡方法中,每个客户端的后续请求被分派到不同的服务器。对于同一个客户端没有任何方式保证发送给同一个服务器。如果需要将一个客户端绑定给某个特定的应用服务器,那么可以使用ip-hash负载均衡机制。 ``` upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; } ```