Ollama 探测拦截与 Cloudflare Workers 边缘优化
当在 Hermes Agent 中配置了自定义提供商(custom)端点时,客户端在初始化阶段会尝试自动剥离 /v1 尾缀并向后端发起 POST /api/show 请求进行 Ollama 服务探测。如果后端仅提供标准 OpenAPI 接口,将导致网关产生大量的 404 错误日志并增加启动时滞。
本卡片记录如何利用 Cloudflare 边缘计算(Workers)拦截并 Mock 该探测请求,从而在不修改本地环境的前提下优化启动速度并净化日志。
一、 第一性原理:Cloudflare Tunnel 的能力边界
- Tunnel 功能定位:Cloudflare Tunnel(
cloudflared)的核心作用是内网穿透与安全路由。它在其 Ingress 规则中虽然可以直接返回特定的 HTTP 状态码,但不具备对特定路径请求进行 Payload 修改或静态 Mock 返回 JSON 响应体的能力。 - 直接返回的局限:如果强行通过 Tunnel 返回 200 状态码而没有合法的 JSON 响应体,会导致 Hermes 客户端在反序列化数据时引发严重的崩溃错误,而不是优雅退回到默认上下文长度。
二、 解决方案:Cloudflare Workers 边缘拦截 (SOP)
由于流量已托管在 Cloudflare 边缘网络上,我们可以使用 Serverless 架构,在流量穿过 Tunnel 到达本地服务器之前完成边缘拦截和 Mock。
1. 客户端规避策略 (可选)
如果需要从客户端直接杜绝探测,可在本地 Hermes 的 config.yaml 配置文件中为对应的 custom 提供商显式指定上下文长度:
context_length: 81922. Workers 边缘拦截配置步骤 (推荐)
- 登录 Cloudflare 控制台,进入左侧菜单的 Workers & Pages -> Overview。
- 点击 Create Application -> Create Worker,随意命名(例如
mock-api-show),点击 Deploy。 - 进入代码编辑器(Edit code),写入以下拦截代理代码:
export default { async fetch(request, env, ctx) { const url = new URL(request.url); // 拦截针对 /api/show 的 POST 探测请求 if (request.method === "POST" && url.pathname === "/api/show") { return new Response(JSON.stringify({ modelfile: "" }), { status: 200, headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" // 解决跨域限制 } }); } // 其余流量正常穿透并回源至 Tunnel return fetch(request); } }; - 点击右上角 Deploy 部署生效。
- 绑定自定义路由:
- 在该 Worker 页面中,选择 Settings -> Triggers -> Routes -> Add route。
- 填写要绑定的域名路径:
[REDACTED].yinf.de/api/show - Zone 选择你的域名。
三、 逆向评估与防线 (Inversion)
1. 方案优势
- 零本地配置:本地容器环境(
cli-proxy-api和cloudflared)无需做任何修改,保持环境纯净。 - 超低延迟:拦截在最近的 Cloudflare 全球边缘节点完成,探测请求根本不会穿过穿透隧道打到本地服务器,本地网关的 404 日志彻底消失。
2. 潜在风险与死法清单
- 路由掩蔽效应:如果未来该域名需要真正接入标准的本地 Ollama 实例,必须手动到 Cloudflare 控制台将该 Worker 路由解绑,否则真实的
/api/show请求会被边缘节点强行拦截并返回空 Mock 数据,导致模型调用报错。
相关链接
- CF-Probe探针部署配置 网络健康度监控
- DockerCompose工作流与更新 代理网关环境守护