一、问题现象
在 Nextcloud 的地图应用中,地图图层出现异常:
- 部分区域无法加载
- 浏览器开发者工具显示请求失败
- 返回内容为类似:
Access blocked
Referer is required by tile usage policy
该问题表现为间歇性缺图块(tile),而非完全不可用。
二、问题背景
该系统长期稳定运行(约 8 年),未做明显变更,但近期突然出现异常。
三、问题定位
通过抓包分析(浏览器 Network)可确认:
请求目标:tile.openstreetmap.org
返回状态:403
原因提示:Referer is required
关键结论:
OpenStreetMap(OSM)服务器要求请求必须携带 Referer,否则拒绝访问。
四、根本原因
问题并非系统损坏,而是外部策略变化:
1)OSM 策略加强(2025–2026)
- 之前:规则存在,但执行宽松
- 现在:开始严格执行
核心要求:
- 必须包含 Referer
- 禁止无来源请求(防爬虫/滥用)
2)Nextcloud 返回策略导致 Referer 丢失
Nextcloud 默认可能返回:
Referrer-Policy: no-referrer
结果:
浏览器不发送 Referer
→ OSM 判定违规
→ 返回 403
3)反向代理未干预该行为
当前 Nginx 配置:
- 未删除 Referer ✔
- 但也未修正 Referrer-Policy ❌
→ 实际上完全依赖 Nextcloud 默认行为
五、解决方案
核心思路
强制浏览器发送 Referer
Nginx 修复配置
在反向代理中加入:
add_header Referrer-Policy strict-origin-when-cross-origin always;
修改后完整流程
Nginx 覆盖 Referrer-Policy
→ 浏览器发送 Referer(域名级别)
→ OSM 判定合规
→ 正常返回 tile
六、使配置生效
执行:
nginx -t
systemctl reload nginx
七、验证方法
打开浏览器开发者工具:
1)检查请求头
Referer: https://your-domain
2)检查响应头
Referrer-Policy: strict-origin-when-cross-origin
3)观察结果
- 不再出现 403 ✔
- 地图完整加载 ✔
八、问题本质总结
这不是 bug,而是:
长期“灰色可用”的用法,被外部服务正式限制
九、经验与建议
1)外部免费服务存在不确定性
OSM tile:
- 无 SLA
- 策略可能调整
- 会限制服务器用途
2)推荐长期方案
按稳定性排序:
(1)临时方案
更换 tile 源(公共镜像)
(2)稳定方案
使用商业 tile 服务(CDN)
(3)最终方案
自建 tile server(完全可控)
十、结论
本次问题的核心是:
- OSM 强化访问策略
- Referer 被浏览器策略阻止
- 通过 Nginx 修正策略后恢复正常
属于:
环境与外部规则变化引发的兼容性问题,而非系统故障