一、问题现象

在 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 修正策略后恢复正常

属于:

环境与外部规则变化引发的兼容性问题,而非系统故障


Leave a Reply

Your email address will not be published. Required fields are marked *