Skip to content

Proxy模块

Proxy模块用于反向代理,将请求转发到后端服务器。

基本配置

基本代理

nginx
location / {
    proxy_pass http://backend;
}

完整代理

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

完整配置

生产环境配置

nginx
upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

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

    location / {
        proxy_pass http://backend;
        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 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;

        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        proxy_busy_buffers_size 8k;
    }
}

常用指令

proxy_pass

nginx
proxy_pass http://backend;

说明:

  • 后端服务器地址
  • 可以是IP、域名或upstream

proxy_set_header

nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

说明:

  • 设置代理请求头
  • Host:主机名
  • X-Real-IP:真实IP
  • X-Forwarded-For:代理链

proxy_connect_timeout

nginx
proxy_connect_timeout 60;

说明:

  • 连接后端服务器超时时间
  • 默认值:60
  • 推荐值:60-120

proxy_send_timeout

nginx
proxy_send_timeout 60;

说明:

  • 发送请求到后端服务器超时时间
  • 默认值:60
  • 推荐值:60-120

proxy_read_timeout

nginx
proxy_read_timeout 60;

说明:

  • 读取后端服务器响应超时时间
  • 默认值:60
  • 推荐值:60-120

完整示例

生产环境配置

nginx
upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

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

    location / {
        proxy_pass http://backend;
        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 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;

        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        proxy_busy_buffers_size 8k;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

缓存配置

启用缓存

nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m;

location / {
    proxy_cache proxy_cache;
    proxy_cache_valid 200 60m;
    proxy_pass http://backend;
}

常见问题

代理超时

原因: proxy_read_timeout设置过小

解决: 增加proxy_read_timeout

nginx
proxy_read_timeout 120;

后端服务器不可达

原因: 后端服务器地址错误

解决: 检查后端服务器地址

nginx
proxy_pass http://backend;

总结

Proxy模块的关键点:

  • proxy_pass:设置后端服务器地址
  • proxy_set_header:设置代理请求头
  • proxy_connect_timeout:设置连接超时
  • proxy_send_timeout:设置发送超时
  • proxy_read_timeout:设置读取超时
  • proxy_buffering:启用代理缓冲

合理配置Proxy模块,实现反向代理功能。