使用 Nginx 作为反向代理和负载均衡器,将请求分发到后端的多个 IIS 服务器,实现简单的负载均衡。
在负载均衡服务器上:
Linux:
sudo apt update
sudo apt install nginx
Windows: 从官网下载 Windows 版 Nginx 并解压
编辑 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf
或 conf/nginx.conf
):
http {
upstream iis_servers {
# 默认使用轮询(round-robin)算法
server 192.168.1.101:80; # 第一台IIS服务器
server 192.168.1.102:80; # 第二台IIS服务器
# 可以添加更多服务器...
# 可选参数:
# weight=2; # 权重,默认为1
# max_fails=3 # 最大失败次数
# fail_timeout=30s # 失败超时时间
}
server {
listen 80;
server_name yourdomain.com; # 替换为您的域名
location / {
proxy_pass http://iis_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Nginx 支持多种负载均衡算法:
轮询(默认):请求按顺序分配到各服务器
upstream iis_servers {
server 192.168.1.101;
server 192.168.1.102;
}
加权轮询:根据服务器性能分配不同权重
upstream iis_servers {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=1;
}
IP哈希:同一客户端IP总是访问同一服务器
upstream iis_servers {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
最少连接:优先分配给连接数最少的服务器
upstream iis_servers {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
Nginx 提供简单的健康检查机制:
upstream iis_servers {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
max_fails
: 允许失败次数fail_timeout
: 超时时间,超过后标记为不可用重启 Nginx 服务
sudo systemctl restart nginx # Linux
nginx -s reload # Windows
访问 Nginx 服务器 IP 或域名,多次刷新查看是否轮流访问不同 IIS 服务器
可以使用以下命令测试:
for i in {1..10}; do curl http://nginx-server-ip; done
会话保持:如果应用需要会话保持,使用 ip_hash
或配置 IIS 共享会话状态
HTTPS 支持:在 Nginx 上配置 SSL 证书,减轻 IIS 服务器的加密负担
缓存:在 Nginx 层配置静态内容缓存
日志:配置访问日志以监控负载均衡效果
高可用:考虑对 Nginx 本身做高可用(如 Keepalived + 双 Nginx)
502 Bad Gateway:
负载不均衡:
ip_hash
而客户端 IP 过于集中性能问题:
通过以上配置,您已经实现了 Nginx + IIS 的简单负载均衡系统。根据实际需求,可以进一步优化和扩展此配置。