下面通过实例演示 Nginx 负载均衡 ip_hash 策略配置,以及某台服务宕机后,Nignx 自动切换机制。
我们将在本机通过 IIS 服务器搭建两个 web 应用,端口分别为和,如下图:

然后通过浏览器访问 http://localhost:1081 服务,如下图:

上图中,左边标题为 1081,这是为了区别两个服务有意为之。
继续访问 http://localhost:1082 服务,如下图:

Nginx 中 IP 哈希(IP Hash)负载均衡策略,Nginx 会根据客户端的 IP 地址进行哈希计算,然后将同一个 IP 的请求发送到同一个后端服务器,这样可以保证同一个客户端的请求都发送到同一个后端服务器,适用于需要保持会话一致性的场景。简单配置如下:
# 配置工作进程数量
worker_processes 1;
events {
# 设置工作进程可以同时打开的最大连接数
worker_connections 1024;
}
http {
# 引用 MIME 类型
include mime.types;
default_type application/octet-stream;
# 【关键位置】负载均衡配置
upstream webname {
ip_hash;
server 127.0.0.1:1081;
server 127.0.0.1:1082;
}
server {
# 监听 8080 端口
listen 8080;
# 设置虚拟服务器的名称
server_name localhost;
location / {
proxy_pass http://webname/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
}
}通过命令检测语法是否有问题,如果没有问题,执行命令重新加载配置。然后通过浏览器访问 http://localhost:8080 地址,效果如下图:

从上图可知,刷新多次依然访问的是 1081,这是由 Nginx 根据我们的 IP 地址计算得出的,如果我们将 1081 服务关闭,再次刷新浏览器会怎么样呢?
(1)先将 1081 服务停掉,如下图:

(2)再次刷新浏览器,看看 nginx 会不会自动将请求切换到 1082 服务,如下图:

从上图可知,Nginx 已经成功将请求转发到 1082 服务。