在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";
}
六、常见问题排查
- 502 Bad Gateway:后端服务没启动或端口不通
- 504 Gateway Timeout:后端响应超时,加
proxy_read_timeout 60s; - 静态资源 404:检查 proxy_pass 路径是否带了斜杠
总结
Nginx 反向代理和负载均衡是 IDC 运维的标配技能。配好健康检查和负载策略,网站的高可用性就有了基本保障。
评论