在IDC运维工作中,Nginx 是最常用的 Web 服务器和反向代理工具。当你的网站流量增长到单台服务器扛不住时,反向代理和负载均衡就是必须掌握的技能。

一、反向代理是什么

反向代理(Reverse Proxy)位于客户端和真实服务器之间,客户端不直接访问后端服务器,而是通过反向代理转发请求。

反向代理的好处:

  • 隐藏后端服务器真实 IP,提升安全性
  • 可以统一 SSL 证书管理
  • 实现负载均衡,分发流量到多台后端
  • 缓存静态内容,减轻后端压力

二、Nginx 反向代理基本配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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_pass:指定后端服务器的地址
  • proxy_set_header:传递客户端的真实信息给后端
  • X-Real-IP:后端能获取客户端真实 IP

三、负载均衡配置

当后端有多台服务器时,用 upstream 定义服务器组:

upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 backup;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}

Nginx 支持的负载均衡策略:

  • 轮询(默认):依次分发,请求均匀
  • weight:按权重分配,性能好的多分请求
  • ip_hash:同一 IP 固定分配同一后端,解决 Session 问题
  • least_conn:优先分配给连接数最少的服务器

四、健康检查

upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

max_fails=3 连续失败 3 次判为不可用,fail_timeout=30s 30 秒后重试。

五、SSL 终结和 WebSocket 代理

反向代理统一管理 SSL 证书,后端不用操心:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl/example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    location / { proxy_pass http://backend; }
}

location /ws/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

六、常见问题排查

  1. 502 Bad Gateway:后端服务没启动或端口不通
  2. 504 Gateway Timeout:后端响应超时,加 proxy_read_timeout 60s;
  3. 静态资源 404:检查 proxy_pass 路径是否带了斜杠

总结

Nginx 反向代理和负载均衡是 IDC 运维的标配技能。配好健康检查和负载策略,网站的高可用性就有了基本保障。