Nginx块结构
http {
# 定义后端服务器列表
upstream backend_servers {
# 后端服务器1,权重为3
server backend1.example.com weight=3;
# 后端服务器2
server backend2.example.com;
# 后端服务器3
server backend3.example.com;
}
server {
listen 80;
#这个配置指定了只有来自example.com的请求才会被当前的server块处理。
server_name example.com;
location / {
# 反向代理配置为 upstream后面的服务名称
proxy_pass http://backend_servers;
# 传递原始请求的Host头部
proxy_set_header Host $host;
# 传递客户端真实IP地址给后端服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
}
- 这里使用
upstream
块定义了一个名为backend_servers
的后端服务器列表。列表中列出了三个后端服务器,分别是backend1.example.com
、backend2.example.com
和backend3.example.com
。在列表中,可以设置权重(weight)来控制请求转发的比例,这里backend1.example.com
的权重设置为3,表示它会接收更多的请求。 - 在
server
块中定义了监听80端口,并且server_name
指定为example.com
。这表示当收到来自example.com
的请求时,Nginx会使用当前的服务器块处理该请求。 - 在
location /
块中配置了反向代理。proxy_pass
指令将请求转发到backend_servers
,即上面定义的后端服务器列表。Nginx会根据设置的权重和负载均衡算法将请求转发给后端服务器。proxy_set_header
指令用于设置传递给后端服务器的请求头,其中Host $host
表示传递原始请求的Host
头部,X-Real-IP $remote_addr
表示传递客户端真实IP地址给后端服务器。
当收到来自
example.com
的请求时,Nginx会将请求转发到后端服务器列表中的其中一个后端服务器,并将相应的响应返回给客户端。通过配置权重和负载均衡算法,可以实现请求在多个后端服务器间的均衡分发。
-
IP哈希(IP Hash): IP哈希算法根据客户端的IP地址将请求分配给后端服务器。通过对客户端IP地址进行哈希运算,每个客户端的请求都会被分配给同一台后端服务器。这对于需要保持会话或状态的应用程序很有用,因为同一客户端的请求将始终被发送到相同的服务器。
以下是使用IP哈希算法的示例代码:
http { upstream backend_servers { ip_hash; server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }
-
最少连接(Least Connections): 最少连接算法将请求分配给当前连接数最少的后端服务器。它根据后端服务器的当前连接数动态地选择目标服务器,以实现负载均衡。这样可以使连接数更均衡地分布在后端服务器之间,从而提高性能和响应速度。
以下是使用最少连接算法的示例代码:
http { upstream backend_servers { least_conn; server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }
-
加权轮询(Weighted Round Robin): 加权轮询算法根据服务器的权重来分配请求。每个后端服务器都有一个权重值,权重越高,接收到的请求越多。通过给予不同的服务器不同的权重,可以实现更灵活的负载均衡策略,使请求更加均衡地分布在不同的服务器上。
以下是使用加权轮询算法的示例代码:
http { upstream backend_servers { server backend1.example.com weight=3; server backend2.example.com weight=2; server backend3.example.com weight=1; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }
根据实际需求,选择适合的负载均衡算法来平衡请求分发并优化后端服务器的利用率。可以根据应用程序的特点和负载情况进行调整和优化。以上示例代码提供了使用不同负载均衡算法的Nginx配置示例。根据自己的需求进行适当的修改和扩展。
Nginx负载均衡算法
- 轮询(Round Robin):按顺序将请求分发给后端服务器。
- IP哈希(IP Hash):根据客户端IP地址将请求分配给同一台后端服务器。
- 最少连接(Least Connections):将请求分配给当前连接数最少的后端服务器。
- 加权轮询(Weighted Round Robin):根据服务器权重分配请求,权重越高,接收到的请求越多。
-
IP哈希(IP Hash): IP哈希算法根据客户端的IP地址将请求分配给后端服务器。通过对客户端IP地址进行哈希运算,**每个客户端的请求都会被分配给同一台后端服务器。**这对于需要保持会话或状态的应用程序很有用,因为同一客户端的请求将始终被发送到相同的服务器。
以下是使用IP哈希算法的示例代码:
http { upstream backend_servers { ip_hash; server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }
-
最少连接(Least Connections): 最少连接算法将请求分配给当前连接数最少的后端服务器。它根据后端服务器的当前连接数动态地选择目标服务器,以实现负载均衡。这样可以使连接数更均衡地分布在后端服务器之间,从而提高性能和响应速度。
以下是使用最少连接算法的示例代码:
http { upstream backend_servers { least_conn; server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }
-
加权轮询(Weighted Round Robin): 加权轮询算法根据服务器的权重来分配请求。每个后端服务器都有一个权重值,权重越高,接收到的请求越多。通过给予不同的服务器不同的权重,可以实现更灵活的负载均衡策略,使请求更加均衡地分布在不同的服务器上。
以下是使用加权轮询算法的示例代码:
http { upstream backend_servers { server backend1.example.com weight=3; server backend2.example.com weight=2; server backend3.example.com weight=1; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }