插件窝 干货文章 nginx之反向代理怎么配置

nginx之反向代理怎么配置

proxy server 配置 header 111    来源:    2025-04-25

Nginx反向代理配置指南

反向代理是Nginx最常用的功能之一,它允许Nginx接收客户端请求并将其转发到后端服务器,然后将响应返回给客户端。以下是详细的配置方法:

基本反向代理配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置详解

  1. proxy_pass - 指定后端服务器的地址

    • 可以是IP、域名或upstream定义的服务器组
    • 例如: proxy_pass http://localhost:8080;
  2. 常用proxy_set_header指令

    • Host $host - 保留原始请求的主机头
    • X-Real-IP $remote_addr - 传递客户端真实IP
    • X-Forwarded-For $proxy_add_x_forwarded_for - 记录请求链
  3. 其他常用代理指令

    proxy_redirect off;  # 关闭重定向
    proxy_http_version 1.1;  # 使用HTTP/1.1协议
    proxy_set_header Connection "";  # 清除连接头
    proxy_read_timeout 60s;  # 读取超时时间
    proxy_connect_timeout 60s;  # 连接超时时间
    proxy_send_timeout 60s;  # 发送超时时间
    

负载均衡配置

使用upstream模块实现多后端服务器的负载均衡:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com backup;

    # 负载均衡策略
    # least_conn;  # 最少连接
    # ip_hash;     # IP哈希
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        include proxy_params;  # 可以包含通用代理配置
    }
}

SSL/TLS终止

Nginx可以处理SSL/TLS加密,然后以明文与后端通信:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

WebSocket代理

代理WebSocket连接需要特殊配置:

location /ws/ {
    proxy_pass http://websocket_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;  # 长连接超时
}

常见问题解决

  1. 502 Bad Gateway错误

    • 检查后端服务是否运行
    • 检查防火墙设置
    • 增加proxy_connect_timeout
  2. 413 Request Entity Too Large

    • 添加 client_max_body_size 100M; 到server或http块
  3. 保持客户端真实IP

    • 确保配置了X-Real-IPX-Forwarded-For
    • 后端应用需要信任这些头信息

最佳实践

  1. 将通用代理配置放在单独文件(如proxy_params)中,通过include引用
  2. 为不同应用使用不同的location
  3. 对敏感应用启用proxy_hide_header隐藏不必要的信息
  4. 考虑使用proxy_cache缓存静态内容

以上配置可以根据实际需求进行调整和组合使用。