网关挂在 /ai/ 下为何转发错路径:用本地记录器核对 proxy_pass
网关放在站点的/ai/前缀下,上游却收到多余前缀或少了一段路径,问题可能发生在反向代理URI替换阶段。先让独立本地记录器回显收到的路径,比对着最终404猜测更直接。本文当前交付的是路径参考计算和静态配置片段,没有运行Nginx。
固定一条请求比较三种转发形式
测试请求是/ai/v1/test?x=1,location固定为/ai/。proxy_pass只写上游地址、不带URI时,普通未改写请求的路径应保留/ai/前缀;带一个斜杠URI时,用斜杠替换匹配前缀,参考结果为/v1/test?x=1;带/proxy/时,参考结果为/proxy/v1/test?x=1。查询串也要核对,不能只截路径前半部分。
这些结果适用于本文简单前缀location,不包含正则location、rewrite、变量proxy_pass、编码路径归一化等额外条件。Nginx官方文档对这些情况另有规则。不要把三个样本扩展成“所有尾斜杠行为都一样”的结论,也不要在不了解原配置时全局添加或删除/v1。
用回显记录器做目标环境复现
附件loopback_service.py只监听本机回环地址,非events路径会返回received_path。先启动它并直接访问,确认记录器能保留查询串;再在独立测试Nginx中选一种配置片段,经代理访问同一请求,保存回显原文。每轮只换proxy_pass的URI部分,保持端口、请求和location不变,才能归因。
本批运行器没有启动上述服务或Nginx,它只对字符串替换参考表做断言,并检查配置片段包含预期指令。输出reference_paths因此是参考答案,不是抓到的真实上游路径。要补成集成验收,必须保存Nginx版本、完整有效配置、请求与记录器响应,不能拿离线通过记录代替nginx语法或转发验证。
加上相邻路径和根路径负例
/aix/v1/test不应因字母相似就被/ai/前缀规则处理。还应单独测试/ai与/ai/,前者是否跳转要由完整server配置确认;不能把跳转后的浏览器地址当成原请求已正确到达。若路径包含百分号编码,也要记录原始请求目标与上游接收目标,避免中间工具自动解码掩盖差别。
这项验收关注服务端location和URI替换,不重复SDK的base_url填写教程。网关管理页中的上游地址是否还会再拼接路径,需要下一层单独记录。最终把入口请求、代理后的路径、网关再转发的路径分别留下,能准确判断多余前缀是在哪一层产生。整个实验无需模型Key,也无需向任何真实生成接口发送请求。
配套样本与复核入口
下载本篇独立合成输入和实验运行器,并下载运行器实际读取的c013.conf。上述文件放在同一目录后运行 python run_lab.py C013。完整运行需要全部四十四份输入及相关配置。结果中的method区分离线计算、静态参考检查与回环实测,不能把前两者当成真实网关已通过。
补充文件:c013-no-uri.conf、c013-prefix.conf、loopback_service.py。合成表供独立复算,配置片段是否实跑以正文说明为准。
资料核对日期:2026-10-24。官方依据1;官方依据2。
与本站相关基础教程的区别:旧文从SDK填写base_url解释404;本文只验反向代理location与proxy_pass URI替换,读者是服务端运维,输出上游实际收到的路径。
不想自己搭网关、自己维护渠道?
力达云是托管的 OpenAI / Anthropic 双格式端点,一期提供 DeepSeek,注册送 ¥5 额度。