插件窝 干货文章 Nginx如何实现HTTP代理配置

Nginx如何实现HTTP代理配置

proxy server header 代理 196    来源:    2025-04-10

Nginx HTTP代理配置指南

Nginx作为高性能的反向代理服务器,可以轻松配置HTTP代理功能。以下是详细的配置方法:

基本HTTP代理配置

  1. 最简单的HTTP代理配置
server {
    listen 80;
    server_name proxy.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 - 定义后端服务器地址

    proxy_pass http://backend_server;
    

    或带URI:

    proxy_pass http://backend_server/some/path/;
    
  2. 请求头设置

    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;
    
  3. 缓冲与超时控制

    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 16k;
    proxy_busy_buffers_size 32k;
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    

高级代理配置

  1. 负载均衡

    upstream backend {
       server backend1.example.com;
       server backend2.example.com;
       server backend3.example.com;
    }
    
    server {
       location / {
           proxy_pass http://backend;
       }
    }
    
  2. WebSocket代理

    location /ws/ {
       proxy_pass http://backend;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }
    
  3. SSL终止代理

    server {
       listen 443 ssl;
       server_name proxy.example.com;
    
       ssl_certificate /path/to/cert.pem;
       ssl_certificate_key /path/to/key.pem;
    
       location / {
           proxy_pass http://backend_server;
           # 其他代理设置...
       }
    }
    

完整配置示例

http {
    upstream backend {
        server 10.0.0.1:8080;
        server 10.0.0.2:8080;
        keepalive 32;
    }

    server {
        listen 80;
        server_name proxy.example.com;

        # 静态文件直接由Nginx处理
        location /static/ {
            root /var/www;
            expires 30d;
        }

        # 动态请求代理到后端
        location / {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            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_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            proxy_buffering on;
            proxy_buffer_size 4k;
            proxy_buffers 8 16k;

            # 启用keepalive
            proxy_set_header Connection "";
        }
    }
}

常见问题排查

  1. 502 Bad Gateway错误

    • 检查后端服务是否运行
    • 检查proxy_pass地址是否正确
    • 增加proxy_connect_timeout值
  2. 代理后获取真实客户端IP

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
  3. 性能优化

    • 启用proxy_buffering
    • 调整buffer大小
    • 使用keepalive连接

通过以上配置,Nginx可以高效地作为HTTP代理服务器使用,满足各种代理需求。