分支
用户 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 18:01 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 18:01 +0800
提交cc627158ebd1d4e4c08966bb9a57490c40c35f93
目录 7d6331b08bc19173e798fa1fad301ac5d560e12d 目录 | zip | gz
上一版本 ac695f6b977351916edbf16b7cd34ce8b6790adb 查看 | 对比
fix(map): nginx 代理改写 Referer 绕过 ak 白名单,解决 APP Referer校验失败(220)

诊断页第 9 块与接口实测共同定位到最终原因:

qt=verify&v=gl&type=webgl&ak=... 返回
{"error":220,"error_msg":"APP Referer校验失败;详情信息请前往:https://lbsyun.baidu.com/surl/5bacf6"}
SDK 收到 220 后弹窗并销毁地图实例,所以表现为「地图显示一秒后被弹窗清空」。

逐 Referer 实测 qt=verify:
http://36.213.150.237:9023/bmap-test.html -> 220
http://36.213.150.237:9023/ -> 220
http://36.213.150.237/ -> 220
(无 Referer) -> 220
http://localhost:9023/ -> 0 ✅
https://api.map.baidu.com/ -> 0 ✅
即:该 ak 的白名单只放行了 localhost 与 api.map.baidu.com,没有 36.213.150.237。

修复(服务器侧,客户端与 ak 都不用动):
nginx /bmap-api/ 反代时把 Referer / Origin 固定改写为白名单允许的 localhost:
proxy_set_header Referer "http://localhost/";
proxy_set_header Origin "http://localhost";
其余 location(瓦片、静态资源)不校验 Referer,保持透传 $http_referer。

验证:
qt=verify 220 -> {"error":0,...} ✅
getscript 200 / 879431B ✅
tile (qt=tile) 200 / 12785B ✅
/sty/icons_2x.js 200 / 119563B ✅

长期建议:让客户在百度地图控制台把 36.213.150.237 加入该 ak 的白名单,
之后可去掉这里的 Referer 改写。
已修改1个文件
4 ■■■■■ 文件已修改
deploy/bmap-proxy.conf 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史