插件窝 干货文章 nginx代理模块怎么使用

nginx代理模块怎么使用

proxy 代理 Nginx server 185    来源:    2025-04-24

Nginx代理模块使用指南

Nginx的代理模块(proxy module)是其最常用的功能之一,主要用于反向代理和负载均衡。以下是详细的使用方法:

基本代理配置

1. 最简单的反向代理配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
    }
}

2. 常用代理指令

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;

    # 连接超时设置
    proxy_connect_timeout 60s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;

    # 缓冲区设置
    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 16k;

    # 其他设置
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
}

高级代理配置

1. 负载均衡

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

    # 负载均衡算法
    least_conn; # 最少连接
    # ip_hash; # IP哈希
    # hash $request_uri consistent; # 一致性哈希
}

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

2. WebSocket代理

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

3. HTTPS代理

location / {
    proxy_pass https://backend_server;
    proxy_ssl_certificate /path/to/client.crt;
    proxy_ssl_certificate_key /path/to/client.key;
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate /path/to/trusted_ca.crt;
    proxy_ssl_session_reuse on;
}

常见问题解决

1. 代理后获取真实客户端IP

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

后端应用需要从这些头部读取真实IP。

2. 代理大文件上传

client_max_body_size 100m;
proxy_request_buffering off;

3. 代理缓存

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_pass http://backend;
}

调试技巧

  1. 查看代理请求头:

    proxy_set_header X-Debug-Proxy "true";
    
  2. 记录代理日志:

    log_format proxy_log '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent" '
                      'proxy: $proxy_host $upstream_addr';
    
    access_log /var/log/nginx/proxy.log proxy_log;
    
  3. 使用curl测试代理:

    curl -v -H "Host: example.com" http://nginx-server/test
    

以上是Nginx代理模块的基本和高级用法,根据实际需求选择合适的配置方式。