⚡ Nginx 反向代理 & 负载均衡
实盘部署关键技术与运维实战 · 第四章
📦 1. Nginx 安装与配置
编译 / 包管理 / 最小配置
🔧 安装方式
- Ubuntu/Debian
sudo apt install nginx— 稳定版,自动注册systemd - CentOS/RHEL
sudo yum install nginx或dnf install nginx - 源码编译 自定义模块,适用于性能调优场景
- Docker
docker run --name nginx -p 80:80 nginx:alpine
📁 核心目录 & 命令
- 主配置
/etc/nginx/nginx.conf - 站点启用
/etc/nginx/sites-available/→sites-enabled/ - 测试配置
nginx -t - 重载
nginx -s reload或systemctl reload nginx
# 最小反向代理配置片段 (nginx.conf)
http {
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
🔄 2. 反向代理原理
透明代理 · 安全 · 统一入口
反向代理 位于客户端与后端服务器之间,客户端无感知后端真实拓扑。 请求统一由 Nginx 接收,再转发至内部服务器,隐藏后端结构、提升安全性与可扩展性。
⚖️ 3. 负载均衡策略
轮询 · 权重 · ip_hash
| 策略 | 说明 | 配置示例 |
|---|---|---|
| 轮询 (round-robin) | 默认策略,请求依次分发到后端服务器,平均分配。 | upstream backend { server 10.0.0.1:8080; server 10.0.0.2:8080; } |
| 权重 (weight) | 按权重比例分配,weight 越大,接收请求越多。 | upstream backend { server 10.0.0.1:8080 weight=3; server 10.0.0.2:8080 weight=1; } |
| ip_hash | 根据客户端 IP 哈希分配,同一 IP 固定访问同一后端,适用于 session 保持。 | upstream backend { ip_hash; server 10.0.0.1:8080; server 10.0.0.2:8080; } |
📌 生产建议:
- ip_hash 适用于需要会话粘滞的应用,但可能造成负载不均。
- weight 配合服务器性能差异使用,高性能节点 weight 更高。
- 还可以使用 least_conn (最少连接) 策略,动态调度。
🔒 4. HTTPS 证书配置
Let's Encrypt / 自签 / 全站加密
📜 证书获取
- Let's Encrypt (Certbot)
certbot --nginx -d example.com自动续签 - 自签证书 用于内网或测试:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 ... - 商业证书 购买后上传 .crt 和 .key 文件
🧩 Nginx SSL 配置片段
server {
listen 443 ssl;
server_name api.xxx.com;
ssl_certificate /etc/ssl/certs/xxx.pem;
ssl_certificate_key /etc/ssl/private/xxx.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend;
}
}
server {
listen 80;
server_name api.xxx.com;
return 301 https://$host$request_uri;
}
💡 最佳实践:HTTP/2 加速 + HSTS 头 + 自动跳转,确保 A+ 评级。
📊 负载均衡流量分配
轮询 vs 权重