🔍 登录 注册

Nginx 高性能网关实战:从反向代理到负载均衡的完整指南

打 打工人 2026-10-20 运维 👁 3 ⏱ 6min

Nginx 高性能网关实战:从反向代理到负载均衡的完整指南

Nginx 凭借高并发、低内存占用的特性,几乎统治了现代 Web 架构的入口层。无论是静态资源服务、反向代理、负载均衡还是网关安全,Nginx 都是第一选择。本文从核心配置出发,给出生产可用的实战方案。

一、Nginx 的进程模型与性能本质

Nginx 采用 master-worker 多进程模型:master 负责管理与热加载配置,worker 负责处理请求。每个 worker 基于事件驱动(epoll)异步处理海量连接,因此:

  • worker 数量通常设为 CPU 核数(worker_processes auto;);
  • 每个 worker 的连接数上限由 worker_connections 控制,默认 1024 可调至 4096;
  • 总并发上限 ≈ worker_processes × worker_connections。
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections 4096;
}

二、静态资源服务与缓存加速

2.1 基本静态服务

server {
    listen 80;
    server_name static.example.com;
    root /data/www;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 带指纹的文件长缓存
    location ~* \.(css|js|png|jpg|webp|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

2.2 Gzip 压缩

gzip on;
gzip_comp_level 6;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;

三、反向代理与负载均衡

3.1 负载均衡的四种策略

| 策略 | 指令 | 适用场景 | |------|------|----------| | 轮询 | 默认 | 后端无状态且能力均等 | | 权重 | weight=3 | 机器性能不均 | | IP 哈希 | ip_hash | 需要会话粘滞 | | 最小连接 | least_conn | 请求耗时差异大 |

upstream api_servers {
    least_conn;
    server 10.0.1.11:8080 weight=2;
    server 10.0.1.12:8080;
    server 10.0.1.13:8080 backup;   # 备份节点,平时不参与
    keepalive 32;                    # 与上游保持长连接
}

server {
    listen 443 ssl;
    server_name api.example.com;

    location /api/ {
        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_connect_timeout 5s;
        proxy_read_timeout 30s;
    }
}

注意:proxy_pass http://api_servers;(不带 URI)会保留原始路径,带 URI 则会替换匹配前缀——这是最常见的配置误区。

四、HTTPS 与 HTTP/2

4.1 TLS 配置基线

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS:强制浏览器走 HTTPS
    add_header Strict-Transport-Security "max-age=31536000" always;
}

4.2 HTTP 跳转 HTTPS

server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

五、限流与访问控制

5.1 漏桶限流

# 定义限流区域:按 IP 限 20 req/s(burst 允许 40)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s;

server {
    location /api/ {
        limit_req zone=api_limit burst=40 nodelay;
        proxy_pass http://api_servers;
    }
}

5.2 并发连接限制

limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    location /download/ {
        limit_conn conn_limit 4;   # 单 IP 最多 4 并发
        limit_rate 1m;             # 单连接限速 1MB/s
        proxy_pass http://file_servers;
    }
}

5.3 IP 黑白名单

location /admin/ {
    allow 10.0.0.0/8;
    deny all;
    proxy_pass http://admin_servers;
}

六、日志管理与排查

6.1 结构化访问日志

log_format json_escape escape=json
    '{"time":"$time_iso8601","remote":"$remote_addr","method":"$request_method",'
    '"uri":"$request_uri","status":$status,"bytes":$body_bytes_sent,'
    '"rt":$request_time,"ua":"$http_user_agent"}';

access_log /var/log/nginx/access.log json_escape;

结构化 JSON 日志可直接接入 ELK / Loki 做可视化监控。

6.2 常用排查命令

nginx -t                     # 校验配置语法
nginx -s reload              # 平滑重载配置(不中断连接)
tail -f /var/log/nginx/error.log
nginx -T | grep -A5 "upstream"   # 导出完整配置检查

七、高可用:keepalived + 双机热备

单台 Nginx 依然是单点。生产环境通常用 keepalived 实现 VIP 漂移:

# keepalived.conf(主节点)
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    virtual_ipaddress { 10.0.0.100 }   # 虚拟 IP,故障自动漂移
}

主节点宕机后,备用节点自动接管 VIP,对客户端无感知。

结语

Nginx 的配置语法看似简单,真正的功力在于理解每个指令的性能影响与排错方法。从 worker 调优、静态缓存、负载均衡到限流防护,把本文的配置基线沉淀为团队的模板,入口层的稳定性就有了保障。记住:每次改动配置都先 nginx -t,再平滑 reload——稳定压倒一切。

读完了?给作者一点支持

本文采用 CC BY 4.0 协议转载 · © 打工人

评论(0)

登录 后参与评论。

  • 还没有评论,来抢沙发。

🔗 相关文章