Nginx 反向代理配置指南
一、基础配置模板(HTTP)
server {
listen 80;
server_name your-domain.com; # 改为实际域名
location / {
proxy_pass http://localhost:3000; # 后端服务地址
# 必须的请求头配置
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:后端服务地址(支持 IP/域名/端口)
- proxy_set_header:传递关键客户端信息
- 请求头最佳实践
proxy_set_header Host $host; # 保留原始域名
proxy_set_header X-Real-IP $remote_addr; # 客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理路径
proxy_set_header X-Forwarded-Proto $scheme; # 原始协议(http/https)
- 性能优化
proxy_connect_timeout 60s; # 后端连接超时(建议5-60s)
proxy_send_timeout 60s; # 发送超时(根据业务调整)
proxy_read_timeout 60s; # 响应读取超时
proxy_buffering off; # 实时通信场景建议关闭
client_max_body_size 100M; # 增加文件上传支持
三、高级场景配置
- HTTPS 支持
server {
listen 443 ssl;
server_name your-domain.com;
# SSL证书路径
ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem;
# 安全强化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location / {
proxy_pass http://localhost:3000;
# 保持基础请求头配置
}
}
# HTTP强制跳转HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
- 负载均衡集群
upstream backend {
# 策略:round-robin(默认)/ip_hash/least_conn
least_conn;
server 192.168.1.10:8080 weight=3; # 权重设置
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server backup.example.com:8080 backup; # 备用节点
}
server {
location / {
proxy_pass http://backend; # 指向upstream
proxy_set_header Host $host;
}
}
- WebSocket 支持
location /wsapp/ {
proxy_pass http://backend;
proxy_http_version 1.1; # 必须HTTP/1.1
# 协议升级头
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 长连接保持(单位:秒)
proxy_read_timeout 86400;
}
四、调试与问题排查
- 日志记录(添加至server块)
access_log /var/log/nginx/proxy_access.log;
error_log /var/log/nginx/proxy_error.log warn;
# 记录代理头信息
log_format proxy_log '$remote_addr - $host [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Proxy: $proxy_host $upstream_addr';
- 常见错误处理
- 502 Bad Gateway:检查后端服务状态和proxy_pass地址
- 413 Request Entity Too Large:增加client_max_body_size
- WebSocket连接失败:确认协议升级头配置正确
优化要点说明
- 结构调整:按使用场景分层级展示(基础→进阶→调试)
- 安全增强:补充TLS最佳实践(协议/加密套件/会话缓存)
- 实用扩展:增加文件上传大小配置 负载均衡健康检查参数 专用WebSocket配置区
- 维护友好: 添加日志记录模板 常见错误排查指引 关键参数添加注释说明
最佳实践提示:配置修改后执行 nginx -t 测试语法,再 systemctl reload nginx 平滑重启服务