人称外号大脸猫

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;
    }
}

二、核心配置详解

  1. 核心指令
  • proxy_pass:后端服务地址(支持 IP/域名/端口)
  • proxy_set_header:传递关键客户端信息
  1. 请求头最佳实践
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)
  1. 性能优化
proxy_connect_timeout 60s;   # 后端连接超时(建议5-60s)
proxy_send_timeout 60s;      # 发送超时(根据业务调整)
proxy_read_timeout 60s;      # 响应读取超时
proxy_buffering off;         # 实时通信场景建议关闭
client_max_body_size 100M;   # 增加文件上传支持

三、高级场景配置

  1. 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;
}
  1. 负载均衡集群
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;
    }
}
  1. 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;
}

四、调试与问题排查

  1. 日志记录(添加至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';
  1. 常见错误处理
  • 502 Bad Gateway:检查后端服务状态和proxy_pass地址
  • 413 Request Entity Too Large:增加client_max_body_size
  • WebSocket连接失败:确认协议升级头配置正确

优化要点说明

  1. 结构调整:按使用场景分层级展示(基础→进阶→调试)
  2. 安全增强:补充TLS最佳实践(协议/加密套件/会话缓存)
  3. 实用扩展:增加文件上传大小配置 负载均衡健康检查参数 专用WebSocket配置区
  4. 维护友好: 添加日志记录模板 常见错误排查指引 关键参数添加注释说明

最佳实践提示:配置修改后执行 nginx -t 测试语法,再 systemctl reload nginx 平滑重启服务

copyright ©2025 ahimu.com all rights reserved 皖ICP备19021547号-1