Nginx反向代理的详细配置示例,涵盖基础功能、高级场景及安全加固方案

以下是一个关于Nginx反向代理的详细配置示例,涵盖基础功能、高级场景及安全加固方案:

一、基础反向代理配置

http {
  # 定义后端服务器组(单节点示例)
  upstream backend_app {
    server 192.168.1.100:8080;  # 应用服务器地址
    keepalive 32;                # 保持32个长连接(减少TCP握手开销)
  }

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

    # HTTP强制跳转HTTPS
    if ($scheme = http) {
      return 301 https://$host$request_uri;
    }

    location / {
      # 基础代理配置
      proxy_pass http://backend_app;
      proxy_set_header Host $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;  # 传递原始协议

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

      # 缓冲区配置(优化大文件传输)
      proxy_buffering on;
      proxy_buffer_size 4k;
      proxy_buffers 8 16k;
      proxy_busy_buffers_size 32k;
    }
  }
}

二、高级反向代理场景

1. 多后端服务路由
http {
  upstream api_gateway {
    server 192.168.1.101:8080 weight=5;  # 主服务(权重5)
    server 192.168.1.102:8080 backup;    # 备用服务(仅当主服务不可用时启用)
  }

  upstream static_assets {
    server 10.0.0.20:8080;               # 独立静态资源服务器
    keepalive 16;
  }

  server {
    listen 443 ssl http2;
    server_name api.example.com;

    # SSL证书配置
    ssl_certificate /etc/nginx/ssl/api.example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/api.example.com.key;

    # 路由规则
    location /api/ {
      proxy_pass http://api_gateway;
      proxy_intercept_errors on;         # 拦截后端5xx错误
      error_page 502 = @fallback;        # 自定义降级页面
    }

    location /static/ {
      proxy_pass http://static_assets;
      add_header Cache-Control "public, max-age=2592000";  # 30天浏览器缓存
    }

    # 降级处理
    location @fallback {
      return 503 "Service Temporarily Unavailable";
    }
  }
}
2. WebSocket代理
http {
  upstream websocket_backend {
    server 192.168.1.103:8080;
    keepalive 16;
  }

  server {
    listen 443 ssl;
    server_name ws.example.com;

    location /ws/ {
      proxy_pass http://websocket_backend;
      proxy_http_version 1.1;           # 必须使用HTTP/1.1
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 86400;         # 长连接超时时间(24小时)
    }
  }
}
3. 代理缓存配置
http {
  proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_zone:100m inactive=7d max_size=10g;  # 缓存存储配置

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

    location / {
      proxy_pass http://backend_cdn;
      proxy_cache cache_zone;           # 启用缓存
      proxy_cache_valid 200 302 10m;   # 200/302状态码缓存10分钟
      proxy_cache_valid 404 1m;         # 404状态码缓存1分钟
      proxy_cache_use_stale error timeout updating http_502;  # 后端故障时使用过期缓存
    }
  }
}

三、安全加固配置

1. 请求限速
http {
  limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;  # 全局限速区

  server {
    location /api/sensitive {
      limit_req zone=api_limit burst=20 nodelay;  # 突发20请求,不延迟
      limit_conn addr 5;                          # 单IP最大并发连接数
    }
  }
}
2. 访问控制
server {
  listen 80;
  server_name admin.example.com;

  # 基础认证
  auth_basic "Restricted Area";
  auth_basic_user_file /etc/nginx/.htpasswd;

  # IP白名单
  allow 192.168.1.0/24;
  allow 10.0.0.0/8;
  deny all;

  # 防止恶意请求
  if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
  }

  location / {
    proxy_pass http://backend_admin;
  }
}
3. 敏感信息过滤
server {
  listen 443 ssl;
  server_name api.example.com;

  # 过滤敏感头信息
  proxy_hide_header X-Powered-By;
  proxy_hide_header Server;

  # 禁止访问敏感路径
  location ~ /(\.git|\.env|\.sql) {
    deny all;
    return 404;
  }
}

四、监控与调试配置

1. 实时状态监控
http {
  server {
    listen 8080;
    server_name status.example.com;

    location /nginx_status {
      stub_status on;              # 基础状态页
      allow 192.168.1.0/24;        # 仅允许内网访问
      deny all;
    }

    location /upstream_status {
      upstream_conf;               # Nginx Plus专用状态页
      allow 192.168.1.0/24;
      deny all;
    }
  }
}
2. 详细访问日志
http {
  log_format proxy_log '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent" '
                      'rt=$request_time uct="$upstream_connect_time" '
                      'uht="$upstream_header_time" urt="$upstream_response_time"';
  access_log /var/log/nginx/proxy_access.log proxy_log;
}

五、配置验证与优化

  1. 语法检查

    nginx -t -c /path/to/nginx.conf  # 指定配置文件测试
    
  2. 平滑重载配置

    nginx -s reload  # 不中断服务加载新配置
    
  3. 性能调优建议

    • 根据业务特性调整worker_processesworker_connections
    • 对静态资源启用open_file_cache提升文件读取效率
    • 使用tcp_nopushtcp_nodelay优化TCP传输
    • 监控proxy_cache命中率,定期清理过期缓存

通过合理配置反向代理,可实现请求路由、负载均衡、安全防护、性能优化等核心功能。实际部署时建议通过压力测试工具(如wrk、ab)验证配置效果,并根据监控数据持续优化参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值