要通过 proxy_pass 配合 rewrite 隐藏后端真实 api 目录,关键是剥离原始前缀、重定向路径、控制透传逻辑;需用正则 location 提取路径,rewrite 后加 break 终止重写并执行 proxy_pass,proxy_pass 必须以 / 结尾且不带路径,同时透传 host 和真实 ip 头。

要通过 proxy_pass 配合 rewrite 隐藏后端真实 API 目录(比如把 /v2/api/xxx 映射为对外统一的 /api/xxx),关键不是“改写 URL”,而是**剥离原始前缀、重定向路径、控制透传逻辑**。核心在于让客户端完全感知不到后端内部路径结构,同时保证后端能正确解析请求。
明确 rewrite + proxy_pass 的执行顺序
rewrite 在 location 内执行后,默认会触发内部重定向(相当于重新走一遍匹配流程),导致 proxy_pass 被跳过。必须用 break 终止 rewrite 并继续执行本 location 中的 proxy_pass:
- 不加 flag 或用
last→ 重写后重新匹配 location,proxy_pass 不执行 - 加
break→ 停止后续 rewrite,直接执行当前 location 的 proxy_pass - proxy_pass 后不能带路径(如
http://127.0.0.1:5000/v2/api),否则 rewrite 失效
用正则 location 提取并重写路径
当后端真实路径含版本或上下文(如 /v2/api/users),而你想对外暴露为 /api/users,推荐用命名捕获正则 + break:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- location 必须以
~或~*开头,例如:location ~ ^/api/(?<path>.*)$ {</path> - rewrite 提取剩余路径,并拼成目标格式:
rewrite ^/api/(.*)$ /v2/api/$1 break; - proxy_pass 只写协议+主机+尾斜杠:
proxy_pass http://127.0.0.1:5000/; - 这样请求
/api/users→ rewrite 成/v2/api/users→ proxy_pass 发送至后端根路径,后端收到完整/v2/api/users
避免路径重复拼接和 404
常见错误是 proxy_pass 自带路径又叠加 rewrite,造成双倍前缀(如 /v2/api/v2/api/users)。务必遵守:
- proxy_pass 结尾带
/,表示“以它为根”;结尾不带/,则原始 URI 全量转发 - 若后端监听在
/v2/api上且无上下文路径处理能力,就不要用proxy_pass http://x.x.x.x:5000/v2/api/,而应靠 rewrite 控制 - 所有 rewrite 后的路径必须以
/开头,否则 Nginx 可能返回 302 或 404
透传 Host 和客户端信息,防止后端路由错乱
隐藏目录后,后端可能依赖 Host 或原始路径做路由判断。需显式控制请求头:
- 设置
proxy_set_header Host $proxy_host;,让后端看到的是代理目标地址,不是客户端访问域名 - 加上
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For,确保日志和风控可用真实 IP - 若后端是 Java/Spring Boot,还需配置信任代理段(如
server.tomcat.remoteip.remote-ip-header=x-forwarded-for),否则getRemoteAddr()仍返回 127.0.0.1
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










