Nginx 反向代理实战指南:从动态解析到 WebSocket
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在现代微服务架构中,Nginx 不仅仅是一个静态资源服务器,更充当着核心网关的角色。它负责流量的路由、负载均衡以及协议的转换。本文将结合具体的生产环境配置实例,详细解析 Nginx 在处理 API 转发、路径重写(Rewrite)以及长连接代理时的最佳实践。 1. 核心前置:动态域名解析与 Resolver在容器化环境(如 Docker、Kubernetes)中,服务实例的 IP 地址通常是动态变化的。如果在 Nginx 配置文件中直接使用 为了解决这个问题,通常采用 “变量定义 Upstream” 的技巧,强制 Nginx 在每次请求时重新解析域名。但这要求必须显式配置 关键配置示例1 http { 2 # 定义 DNS 解析器 3 # Docker 环境通常使用 127.0.0.11 4 # 公网环境可使用 8.8.8.8 或 1.1.1.1 5 resolver 127.0.0.11 valid=30s; 6 7 # 解析超时时间 8 resolver_timeout 5s; 9 10 server { 11 listen 80; 12 # ... 后续 location 配置 13 } 14 } 技术解析:
2. 场景演练:常规 API 代理与路径剥离最常见的反代需求是将前端的特定前缀请求(如 配置实例:/prd-api/nginx
1 location /prd-api/ { 2 # 1. 使用变量定义 Upstream,配合 resolver 实现动态解析 3 set $backend_upstream http://backend:8080; 4 5 # 2. 路径重写:剥离 /prd-api/ 前缀 6 # 请求 /prd-api/users -> /users 7 rewrite ^/prd-api/(.*)$ /$1 break; 8 9 # 3. 转发请求 10 proxy_pass $backend_upstream; 11 12 # 4. 传递标准 Header,确保后端获取真实客户端信息 13 proxy_set_header Host $host; 14 proxy_set_header X-Real-IP $remote_addr; 15 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 proxy_set_header X-Forwarded-Proto $scheme; 17 }
技术解析:
3. 场景演练:API 路径映射在某些复杂场景下,前端暴露的路由结构与后端服务的实际路由结构并不一致,这时需要进行路径映射替换,而不仅仅是剥离前缀。 配置实例:/ai-api/nginx
1 # Proxy for AI analysis API 2 location /ai-api/ { 3 set $analysis_upstream http://analysis:8199; 4 5 # 路径映射:将 /ai-api/xxxx 映射为 /api/xxxx 6 rewrite ^/ai-api/(.*)$ /api/$1 break; 7 8 proxy_pass $analysis_upstream; 9 10 proxy_set_header Host $host; 11 proxy_set_header X-Real-IP $remote_addr; 12 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 13 proxy_set_header X-Forwarded-Proto $scheme; 14 }
技术解析:
4. 场景演练:WebSocket 协议升级WebSocket 是一种全双工通信协议,常用于实时消息推送。由于 Nginx 默认使用 HTTP/1.0 连接上游,且不传递 Upgrade 头部,直接反代会导致 WebSocket 握手失败。 配置实例:/ws-api/nginx
1 # Proxy for WebSocket (frontend -> PC Backend) 2 location /ws-api/ { 3 set $backend_upstream http://backend:8081; 4 5 # 复杂的路径重写:前端 /ws-api/ -> 后端 /websocket/server/ 6 rewrite ^/ws-api/(.*)$ /websocket/server/$1 break; 7 8 proxy_pass $backend_upstream; 9 10 # --- WebSocket 核心配置 Start --- 11 12 # 1. 必须使用 HTTP/1.1,HTTP/1.0 不支持 Keep-alive 和 Upgrade 13 proxy_http_version 1.1; 14 15 # 2. 传递 Upgrade 头部,告知后端进行协议升级 16 proxy_set_header Upgrade $http_upgrade; 17 proxy_set_header Connection "upgrade"; 18 19 # --- WebSocket 核心配置 End --- 20 21 proxy_set_header Host $host; 22 proxy_set_header X-Real-IP $remote_addr; 23 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 24 proxy_set_header X-Forwarded-Proto $scheme; 25 26 # 建议:适当延长读取超时时间,避免长连接因空闲被切断 27 proxy_read_timeout 3600s; 28 }
技术解析:
总结通过合理配置 https://www.cnblogs.com/swizard/p/19304971 该文章在 2025/12/5 8:58:18 编辑过 |
关键字查询
相关文章
正在查询... |