给你颗糖 2024-10-10 17:58 采纳率: 0%
浏览 135

Cloudflare Tunnel 映射本地端口连接使用时遇到websocket: bad handshake' 错误如何解决?

 ERR failed to connect to origin error=”websocket: bad handshake” originURL=https://*** 

  • 写回答

2条回答 默认 最新

  • 铭渊老黄 新星创作者: Python技术领域 2024-10-12 06:00
    关注
    🕒上午好,题主!目前:🟢[在线]
    📢参考GPT-4o mini 模型、由清水白石008整理提供!
    📣今日金句:成功是百分之一的灵感,加上百分之九十九的汗水。”** — 托马斯·爱迪生
    

    在使用 Cloudflare Tunnel 映射本地端口时,出现 websocket: bad handshake 错误,通常与以下几方面相关:

    常见原因和解决方案

    1. WebSocket 和 SSL 的配置问题

      • WebSocket 协议在 HTTPS 上使用 wss:// 协议(安全的 WebSocket),确保你在通过 HTTPS 使用 WebSocket 时,配置正确。
      • 解决方案
        • 确保你在客户端代码中使用 wss:// 而不是 ws:// 来连接 WebSocket。
        • 如果服务器端要求 HTTPS,确保 Cloudflare Tunnel 配置了正确的 SSL 证书,并启用了 TLS 终端。
    2. Cloudflare SSL 设置问题

      • Cloudflare 提供了几种 SSL 模式(如 Full、Full (Strict)、Flexible),这些模式控制了 Cloudflare 如何处理 SSL 流量。
      • 解决方案
        • 尝试将 SSL 模式设置为 **Full (Strict)**,这确保了 Cloudflare 和你的服务器之间的连接使用有效的 SSL 证书。
        • 在 Cloudflare 的仪表板中,进入域名设置 -> SSL/TLS -> SSL 模式,选择合适的模式。
    3. WebSocket 支持未启用

      • Cloudflare 默认支持 WebSocket,但需要确保已在你的域名设置中启用 WebSocket 支持。
      • 解决方案
        • 确认 Cloudflare 管理控制台的网络设置中,WebSocket 选项已启用:进入 Cloudflare -> 域名 -> 网络,确保 WebSocket 支持已开启。
    4. Origin 服务器问题

      • 如果你使用的是本地服务器,确保服务器可以正确处理 WebSocket 请求。该错误可能与服务器端未正确处理 WebSocket 握手有关(如缺少正确的响应头)。
      • 解决方案
        • 检查服务器端是否正确处理 WebSocket 握手,特别是 HTTP 101 状态码的返回(表示协议切换成功)。确保服务器上配置的 WebSocket 路由正常工作。
    5. 端口映射问题

      • 确保本地的端口映射正确,Cloudflare Tunnel 需要将外部流量准确地映射到本地服务器的 WebSocket 端口。
      • 解决方案
        • 确认 Cloudflare Tunnel 配置文件(cloudflared.yml 或其他配置文件)中的端口映射是否正确,WebSocket 服务运行在正确的端口上。

    排查步骤

    1. 检查日志:查看 cloudflared 的运行日志,了解更多关于握手失败的具体原因。
    2. 检查 WebSocket 服务:使用 curl 或其他工具,直接连接到本地 WebSocket 服务,确保 WebSocket 服务在本地正常工作。
    3. 查看 Cloudflare 错误日志:检查 Cloudflare 后台是否显示了更多关于该问题的错误信息,可能会提供具体的调试线索。

    通过这些步骤,你可以逐步解决 Cloudflare Tunnel 通过 WebSocket 时遇到的 bad handshake 错误。如果问题依然存在,可以进一步分享具体的配置文件和日志,以便更详细的排查。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月10日