首页主机资讯Nginx配置反向代理有何技巧

Nginx配置反向代理有何技巧

时间2025-12-09 17:00:04发布访客分类主机资讯浏览1392
导读:Nginx 反向代理配置技巧 一 基础与必备头信息 使用 proxy_pass 指定后端地址;在 location 中转发时,注意路径末尾斜杠对 URI 拼接的影响:当 location 有路径前缀且 proxy_pass 目标也以斜杠结...

Nginx 反向代理配置技巧

一 基础与必备头信息

  • 使用 proxy_pass 指定后端地址;在 location 中转发时,注意路径末尾斜杠对 URI 拼接的影响:当 location 有路径前缀且 proxy_pass 目标也以斜杠结尾时,Nginx 会用 location 匹配后的剩余部分拼接到后端地址。示例:location /api/ { proxy_pass http://127.0.0.1:3000/; } 会把 /api/foo 转发为 /foo。若不加斜杠,可能保留 /api/ 前缀导致 404。
  • 始终显式设置转发头,确保后端获取真实客户端信息:
    • 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; (告知后端原始是 http 还是 https)
  • 常用超时控制:
    • proxy_connect_timeout 60s; (连接后端超时)
    • proxy_read_timeout 120s; (读取后端响应超时)
    • proxy_send_timeout 120s; (发送请求到后端超时)
  • 变更后先执行 nginx -t 校验,再 systemctl reload nginx 生效。

二 负载均衡与健康检查

  • 使用 upstream 定义后端组,按需选择策略:
    • 轮询(默认)、least_conn(最少连接)、ip_hash(会话保持)、weight(权重)、backup(备用)。
  • 示例:
    • upstream backend_servers {
      least_conn;
      server 192.168.1.100:8080 weight=3;
      server 192.168.1.101:8080;
      server 192.168.1.102:8080 backup;
      }
    • server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; } }
  • 建议为上游开启长连接复用:在 upstream 内配置 keepalive 32; ,减少频繁建连开销。

三 性能与安全优化

  • 进程与连接:
    • worker_processes auto; (通常设为 CPU 核心数)
    • events { worker_connections 1024+; use epoll; multi_accept on; }
    • 提升文件描述符限制:worker_rlimit_nofile 40000;
  • 传输与压缩:
    • 启用 sendfile on; tcp_nopush on; tcp_nodelay on;
    • 开启 gzip on; gzip_comp_level 5; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  • 上游长连接:在 upstream 中配置 keepalive 32; ,并在 location 中设置 proxy_http_version 1.1; proxy_set_header Connection “”; 以复用连接。
  • 缓冲与缓存:
    • 静态资源或稳定接口可开启 proxy_buffering on; 并合理设置 proxy_buffer_size / proxy_buffers;大文件或流媒体可关闭缓冲:proxy_buffering off;
    • 定义共享内存缓存:
      • proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;
      • location / { proxy_cache my_cache; proxy_pass http://backend; }
  • 安全加固:
    • 反向代理可集中处理 SSL/TLS 卸载、隐藏后端真实 IP、统一 WAF/访问控制 策略。

四 高级场景配置要点

  • WebSocket:
    • 升级协议与长连接:
      • proxy_http_version 1.1;
      • proxy_set_header Upgrade $http_upgrade;
      • proxy_set_header Connection “Upgrade”;
  • HTTPS 终端:在 server 块配置 ssl_certificate /path/fullchain.pem; ssl_certificate_key /path/privkey.pem; 并在 proxy_set_header X-Forwarded-Proto https; 告知后端。
  • 路径重写与跳转:使用 proxy_redirect 修正后端返回的 Location 头;必要时配合 rewrite 做路径前缀处理。
  • 静态资源直出:对静态文件单独 location,直接 root /data/static; 或配合 proxy_cache 提升命中率。
  • 典型片段(WebSocket):
    • location /ws/ {
      proxy_pass http://backend_ws;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection “Upgrade”;
      proxy_read_timeout 3600s;
      }

五 排错清单与最佳实践

  • 路径转发不符预期:核对 locationproxy_pass 是否带斜杠,必要时调整拼接规则。
  • 后端拿不到真实 IP:确认已设置 X-Real-IP / X-Forwarded-For / X-Forwarded-Proto
  • WebSocket 失败:缺少 Upgrade/Connection 头或 proxy_read_timeout 过短。
  • 长连接未复用:上游未设 keepalive,或 proxy_http_version / Connection 未正确配置。
  • 配置未生效或语法错误:先 nginx -t,再 reload;变更前备份并灰度发布。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Nginx配置反向代理有何技巧
本文地址: https://pptw.com/jishu/767258.html
Nginx配置日志如何优化分析 Ubuntu Hadoop 容错机制如何设置

游客 回复需填写必要信息