本文档风哥主要介绍Linux系统大规模Nginx反向代理负载均衡集群配置,包括Nginx基础概念、反向代理原理、负载均衡原理、Nginx安装配置、反向代理配置、负载均衡配置以及实战案例等内容,风哥教程参考Linux官方文档Networking、System administration等内容,适合系统管理员在生产环境中使用。
Part01-基础概念与理论知识
1.1 Nginx基础概念
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx以其高性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名。
- HTTP服务器:处理HTTP请求
- 反向代理:将请求转发到后端服务器
- 负载均衡:将请求分发到多个后端服务器
- SSL/TLS终端:处理HTTPS请求
- 缓存:缓存静态内容和动态内容
- 访问控制:基于IP、用户等的访问控制
1.2 反向代理原理
反向代理是指代理服务器接收客户端的请求,然后将请求转发到后端服务器,最后将后端服务器的响应返回给客户端。反向代理可以隐藏后端服务器的真实IP地址,提高系统的安全性。
1. 客户端发送请求到反向代理服务器
2. 反向代理服务器接收请求
3. 反向代理服务器将请求转发到后端服务器
4. 后端服务器处理请求并返回响应
5. 反向代理服务器接收响应
6. 反向代理服务器将响应返回给客户端
# 反向代理的优势
– 隐藏后端服务器:提高安全性
– 负载均衡:分发请求到多个后端服务器
– 缓存:缓存静态内容,提高性能
– SSL终端:集中处理HTTPS请求
– 访问控制:统一的访问控制策略
1.3 负载均衡原理
负载均衡是指将请求分发到多个后端服务器,以提高系统的性能和可用性。Nginx支持多种负载均衡算法,可以根据不同的场景选择合适的算法。
- 轮询(Round Robin):按顺序分发请求
- 最少连接(Least Connections):将请求分发到连接数最少的服务器
- IP哈希(IP Hash):根据客户端IP地址哈希分发请求
- 权重(Weight):根据服务器权重分发请求
Part02-生产环境规划与建议
2.1 集群架构设计
生产环境Nginx集群架构设计要点:
– 2节点集群:基本高可用配置
– 3节点集群:推荐配置,提供更好的可靠性
– 多节点集群:适用于大规模应用
# 集群拓扑
– 前端:Nginx反向代理负载均衡集群
– 中间层:应用服务器集群
– 后端:数据库集群
# 负载均衡策略
– 轮询:适用于后端服务器性能相近的场景
– 最少连接:适用于请求处理时间差异较大的场景
– IP哈希:适用于需要会话保持的场景
– 权重:适用于后端服务器性能差异较大的场景
2.2 硬件要求
生产环境硬件要求:
– CPU:多核处理器,推荐4核以上
– 内存:8GB以上,根据流量调整
– 存储:SSD存储,提高I/O性能
– 网络:万兆网卡,确保网络带宽
# 负载均衡节点要求
– 相同配置:所有Nginx节点硬件配置应相同
– 冗余电源:避免电源故障
– 冗余网络:多网卡配置
# 后端服务器要求
– 根据应用需求配置:不同应用对服务器要求不同
– 可扩展性:支持水平扩展
– 监控:实时监控服务器状态
2.3 网络设计
生产环境网络设计要点:
– 前端网络:面向客户端的网络
– 后端网络:Nginx与应用服务器之间的网络
– 管理网络:用于集群管理
# 网络配置
– 静态IP:所有节点使用静态IP
– 网络隔离:使用VLAN隔离不同网络
– 网络冗余:多网卡绑定
– 网络监控:监控网络状态
# 网络安全
– 防火墙:限制网络访问
– SSL/TLS:加密通信
– DDoS防护:防止分布式拒绝服务攻击
Part03-生产环境项目实施方案
3.1 Nginx安装配置
3.1.1 安装Nginx
$ sudo dnf install -y nginx
# 启动Nginx服务
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
# 检查Nginx状态
$ sudo systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2026-04-03 08:00:00 CST; 1min ago
Docs: man:nginx(8)
Process: 1234 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 1233 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 1232 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 1235 (nginx)
Tasks: 2 (limit: 4915)
Memory: 3.2M
CPU: 20ms
CGroup: /system.slice/nginx.service
├─1235 nginx: master process /usr/sbin/nginx
└─1236 nginx: worker process
# 测试Nginx
$ curl http://localhost
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
3.1.2 配置Nginx
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# 编辑Nginx配置
$ sudo vim /etc/nginx/nginx.conf
# 基本配置示例
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
# 重新加载配置
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx
3.2 反向代理配置
3.2.1 配置反向代理
$ sudo vim /etc/nginx/conf.d/reverse-proxy.conf
# 反向代理配置示例
server {
listen 80;
server_name fgedu.net.cn;
location / {
proxy_pass http://backend-server;
proxy_set_header Host $host;
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;
}
}
# 重新加载配置
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx
3.3 负载均衡配置
3.3.1 配置负载均衡
$ sudo vim /etc/nginx/conf.d/load-balancing.conf
# 负载均衡配置示例
upstream backend-server {
# 轮询算法
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
server_name fgedu.net.cn;
location / {
proxy_pass http://backend-server;
proxy_set_header Host $host;
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;
}
}
# 重新加载配置
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx
# 配置权重负载均衡
upstream backend-server {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 weight=1;
}
# 配置IP哈希负载均衡
upstream backend-server {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
# 配置最少连接负载均衡
upstream backend-server {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
Part04-生产案例与实战讲解
4.1 Web服务负载均衡集群案例
4.1.1 企业级Web负载均衡集群
# 环境:2台Nginx服务器,3台Web服务器
# 目标:实现Web服务的负载均衡
# 1. 配置Nginx负载均衡
$ sudo vim /etc/nginx/conf.d/web-load-balancing.conf
upstream web-servers {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
server_name www.fgedu.net.cn;
location / {
proxy_pass http://web-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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 2. 配置Web服务器
$ sudo dnf install -y httpd
$ sudo echo “Hello from $(hostname)” > /var/www/html/index.html
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
# 3. 测试负载均衡
$ for i in {1..10}; do curl http://www.fgedu.net.cn; done
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
4.2 API服务负载均衡集群案例
4.2.1 API服务负载均衡集群
# 环境:2台Nginx服务器,4台API服务器
# 目标:实现API服务的负载均衡
# 1. 配置Nginx负载均衡
$ sudo vim /etc/nginx/conf.d/api-load-balancing.conf
upstream api-servers {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
server 192.168.1.104:8080;
}
server {
listen 80;
server_name api.fgedu.net.cn;
location / {
proxy_pass http://api-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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
# 2. 配置API服务器
$ sudo dnf install -y nodejs npm
$ sudo mkdir -p /opt/api
$ sudo vim /opt/api/app.js
const http = require(‘http’);
const os = require(‘os’);
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader(‘Content-Type’, ‘application/json’);
res.end(JSON.stringify({
message: ‘Hello from API server’,
server: os.hostname(),
timestamp: new Date().toISOString()
}));
});
server.listen(8080, () => {
console.log(`Server running on port 8080`);
});
$ cd /opt/api
$ npm init -y
$ node app.js &
# 3. 测试API负载均衡
$ for i in {1..10}; do curl http://api.fgedu.net.cn; echo; done
{“message”:”Hello from API server”,”server”:”api1″,”timestamp”:”2026-04-03T00:00:00.000Z”}
{“message”:”Hello from API server”,”server”:”api2″,”timestamp”:”2026-04-03T00:00:01.000Z”}
{“message”:”Hello from API server”,”server”:”api3″,”timestamp”:”2026-04-03T00:00:02.000Z”}
{“message”:”Hello from API server”,”server”:”api4″,”timestamp”:”2026-04-03T00:00:03.000Z”}
{“message”:”Hello from API server”,”server”:”api1″,”timestamp”:”2026-04-03T00:00:04.000Z”}
{“message”:”Hello from API server”,”server”:”api2″,”timestamp”:”2026-04-03T00:00:05.000Z”}
{“message”:”Hello from API server”,”server”:”api3″,”timestamp”:”2026-04-03T00:00:06.000Z”}
{“message”:”Hello from API server”,”server”:”api4″,”timestamp”:”2026-04-03T00:00:07.000Z”}
{“message”:”Hello from API server”,”server”:”api1″,”timestamp”:”2026-04-03T00:00:08.000Z”}
{“message”:”Hello from API server”,”server”:”api2″,”timestamp”:”2026-04-03T00:00:09.000Z”}
4.3 高可用Nginx集群案例
4.3.1 高可用Nginx集群
# 环境:2台Nginx服务器,1台负载均衡器(HAProxy)
# 目标:实现Nginx的高可用
# 1. 配置HAProxy
$ sudo dnf install -y haproxy
$ sudo vim /etc/haproxy/haproxy.cfg
frontend nginx-frontend
bind *:80
mode http
default_backend nginx-backend
backend nginx-backend
mode http
balance roundrobin
server nginx1 192.168.1.101:80 check
server nginx2 192.168.1.102:80 check
# 2. 启动HAProxy
$ sudo systemctl start haproxy
$ sudo systemctl enable haproxy
# 3. 配置Nginx服务器
$ sudo vim /etc/nginx/conf.d/web-load-balancing.conf
upstream web-servers {
server 192.168.1.103:80;
server 192.168.1.104:80;
server 192.168.1.105:80;
}
server {
listen 80;
server_name www.fgedu.net.cn;
location / {
proxy_pass http://web-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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 4. 测试高可用
$ for i in {1..10}; do curl http://www.fgedu.net.cn; done
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
# 5. 模拟Nginx故障
$ sudo systemctl stop nginx on nginx1
$ for i in {1..10}; do curl http://www.fgedu.net.cn; done
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Hello from web2
Hello from web3
Hello from web1
Part05-风哥经验总结与分享
5.1 Nginx负载均衡最佳实践
Nginx负载均衡最佳实践:
- 合理选择负载均衡算法:根据应用特点选择合适的负载均衡算法
- 配置健康检查:定期检查后端服务器的健康状态
- 使用会话保持:对于需要会话的应用,使用IP哈希或会话粘性
- 配置超时参数:合理设置连接超时和响应超时
- 启用缓存:缓存静态内容,提高性能
- 配置SSL/TLS:使用HTTPS保护数据传输
- 监控与日志:实时监控Nginx状态,分析访问日志
- 定期备份配置:备份Nginx配置文件,防止配置丢失
5.2 常见问题与解决方案
## 1. 负载均衡不均匀
– 原因:负载均衡算法选择不当、后端服务器性能差异较大
– 解决方案:选择合适的负载均衡算法、配置服务器权重
## 2. 后端服务器健康检查失败
– 原因:后端服务器故障、网络连接问题、健康检查配置不当
– 解决方案:检查后端服务器状态、检查网络连接、调整健康检查配置
## 3. 会话丢失
– 原因:负载均衡算法未考虑会话保持、后端服务器会话未共享
– 解决方案:使用IP哈希算法、配置会话共享、使用Redis存储会话
## 4. 性能问题
– 原因:Nginx配置不当、后端服务器性能不足、网络带宽不足
– 解决方案:优化Nginx配置、增加后端服务器、增加网络带宽
## 5. SSL/TLS配置问题
– 原因:证书过期、配置不当、密码套件不安全
– 解决方案:更新证书、优化SSL配置、使用安全的密码套件
5.3 性能调优建议
风哥针对
from PG视频:www.itpux.com
Nginx性能调优建议:
- 调整worker_processes:设置为CPU核心数
- 调整worker_connections:根据服务器内存调整
- 启用sendfile:提高文件传输性能
- 启用tcp_nopush和tcp_nodelay:提高网络性能
- 调整keepalive_timeout:合理设置连接保持时间
- 启用gzip压缩:减少传输数据量
- 使用缓存:缓存静态内容和动态内容
- 优化日志配置:减少日志开销
风哥提示:
风哥提示:
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
