⚡ 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 接收,再转发至内部服务器,隐藏后端结构、提升安全性与可扩展性。

🌐 客户端 Nginx 反向代理 App Server 1 App Server 2 App Server 3 ⬅ 请求分发 负载均衡 / 缓存 / SSL
⚖️ 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 权重
轮询 (1:1:1) S1 S2 S3 权重 (3:1:1) S1 S2 S3