资讯动态

Laravel WebSockets 遇上 Cloudflare:用 `--port=2096` 解决生产环境 `:6001` 端口无响应

发布时间:2026/10/15 14:31:02 来源:尧图企业网站定制
后端即时通讯【免费下载链接】laravel-websocketsWebsockets for Laravel. Done right.项目地址https://gitcode.com/gh_mirrors/la/laravel-websockets点击查看免费下载导读本文聚焦一个在真实生产环境中高频出现的问题把 laravel-websocketsLaravel WebSockets部署在 Cloudflare 后面时WebSocket 服务器默认监听的:6001端口可能对外完全不可达。文章将结合仓库源码说明问题根因给出「改用 Cloudflare 放行端口如 2096直接监听」的官方推荐解法并补充端口变更后需要同步调整的广播配置、Laravel Echo 配置与底层实现原理帮助你一次性把生产环境的 WebSocket 连接调通。问题现象生产服务器对:6001没有响应当你把 Laravel 应用部署到生产环境并启用了 Cloudflare CDN / 代理后可能会发现一个奇怪的现象本地一切正常但部署到线上后浏览器与 WebSocket 服务器之间始终无法建立连接服务器似乎对:6001端口完全没有响应。根据仓库的 FAQ 文档 说明根因并不在 laravel-websockets 本身而是 Cloudflare 并不会开放任意端口供外部流量穿透——它只放行少数几个特定端口。默认情况下laravel-websockets 服务器监听的是6001端口而这个端口不在 Cloudflare 的放行列表内因此从公网发起的 WebSocket 握手请求根本无法到达你的服务器。为什么默认端口是 6001从源码可以确认6001是 laravel-websockets 的全链路默认端口在 StartServer.php 中websockets:serve命令签名为{--host0.0.0.0}与{--port6001}即不传参时默认监听所有网卡的6001端口在 ServerFactory.php 中host与port会被拼成{$this-host}:{$this-port}传给 ReactPHP 的Server创建实际监听 Socket见 ServerFactory.php这就是最终对外监听的地址配套的 Laravel 广播配置 config/broadcasting.php 默认指向PUSHER_APP_PORT 6001前端 Laravel Echo 的wsPort也默认是6001见 pusher.md。所以整个默认链路都围绕6001展开。一旦 Cloudflare 放行不了这个端口整条 WebSocket 链路就会从入口处断裂。解决方案让服务器监听 Cloudflare 放行的端口仓库 FAQ 给出的官方解法非常直接把 WebSocket 服务器的监听端口从默认的6001改成一个 Cloudflare 支持的端口。原文档以2096为例php artisan websockets:serve --port2096执行后laravel-websockets 会改在:2096端口上提供 WebSocket 服务此时 Cloudflare 能够将公网流量转发进来新的:2096WebSocket 服务器即可正常工作。--port参数在底层如何生效理解这条命令的底层行为有助于你在踩坑时快速定位问题StartServer::buildServer() 读取$this-option(port)将其与$this-option(host)一起传入ServerFactory构造函数ServerFactory::createServer() 用new Server({$this-host}:{$this-port}, $this-loop)在指定地址上创建 ReactPHP 异步 Socket 服务器随后该 Socket 被包装进SecureServer若配置了 SSL与IoServer启动后便开始对外监听。也就是说--port是最终决定监听端口的唯一参数改端口不需要修改任何源码或配置文件重启命令即可生效。仓库的测试也验证了--port参数的可用性StartServerTest.php 中以--port 6001启动服务器并断言启动不失败其余用例则分别使用6002、6003验证SIGINT/SIGTERM信号下的优雅关闭流程见 StartServerTest.php说明任意端口均可作为监听端口使用。换端口后必须同步调整的三处客户端配置改完服务器监听端口只是第一步。因为默认配置链路全部指向6001你还需要把以下三处同步改为新端口否则会出现「服务器在 2096 上正常监听但 Laravel 应用发不出事件、浏览器连不上」的割裂状态。1. Laravel 广播配置config/broadcasting.phpLaravel 应用通过 Pusher HTTP API 向 WebSocket 服务器推送事件时会读取config/broadcasting.php中pusher段落的host与port。请将.env中的端口变量指向新端口PUSHER_APP_PORT2096对应 pusher.md 中的配置段options [ cluster env(PUSHER_APP_CLUSTER), encrypted true, host env(PUSHER_APP_HOST, 127.0.0.1), port env(PUSHER_APP_PORT, 6001), scheme env(PUSHER_APP_SCHEME, http), curl_options [ CURLOPT_SSL_VERIFYHOST 0, CURLOPT_SSL_VERIFYPEER 0, ], ],2. 前端 Laravel EchowsPort浏览器端通过pusher-js/ Laravel Echo 建立 WebSocket 连接需要把wsPort改为新端口window.Echo new Echo({ broadcaster: pusher, key: your-pusher-key, wsHost: window.location.hostname, wsPort: 2096, forceTLS: false, disableStats: true, enabledTransports: [ws, wss], });注意如果你通过 HTTPS 访问站点应结合 SSL 支持文档 将forceTLS设为true并在 WebSocket 服务器上配置证书。3. 统计与 Dashboard 端口config/websockets.phpconfig/websockets.php 中dashboard.port默认读取LARAVEL_WEBSOCKETS_PORT默认值为6001用于 WebSocket 服务器自身的 Dashboard 与健康检查等 HTTP 接口。建议通过环境变量统一管理LARAVEL_WEBSOCKETS_PORT2096在 ServerFactory.php 中可以看到服务器会把 WebSocket 路由如/app/{appKey}、/apps/{appId}/events、/health等注册逻辑见 Router.php与 Dashboard 路由统一挂在同一个监听 Socket 上因此这个端口与--port保持一致即可。备选思路不改端口用反向代理走 80/443除了直接改用 Cloudflare 放行的端口另一种常见做法是让 WebSocket 服务器继续监听127.0.0.1:6001由 Nginx、Caddy 等反向代理在80/443端口终结 TLS 并把 WebSocket 升级请求转发过去。这样公网只暴露80/443完全绕开 Cloudflare 的端口限制问题同时还能统一 HTTPS 管理。仓库的 SSL 文档 给出了完整的 NginxUpgrade/Connection头转发配置与 Caddy v2 的reverse_proxy配置示例可作为生产环境的另一条成熟路径。两条路线各有取舍方案优点注意点直接监听 Cloudflare 放行端口如 2096配置最简单一条命令即可需要额外开放防火墙端口需同步修改上文的客户端配置反向代理转发到 6001只暴露 80/443TLS 统一管理需额外维护代理配置需正确设置Upgrade/Connection请求头小结与验证处理「laravel-websockets Cloudflare 生产环境连不上」问题的完整链路是确认根因Cloudflare 不放行默认的:6001端口导致公网 WebSocket 握手无法到达服务器执行修复php artisan websockets:serve --port2096或任一 Cloudflare 放行端口必要时配合--host指定监听网卡默认0.0.0.0参数定义见 StartServer.php同步配置将PUSHER_APP_PORT、Echo 的wsPort、LARAVEL_WEBSOCKETS_PORT一并改为新端口验证连通访问http://你的域名:2096/health应返回{ok:true}健康检查实现见 HealthHandler.php并确认浏览器能成功建立 WebSocket 连接、Laravel 能正常推送事件。按照上述步骤操作你的 WebSocket 服务器就能在 Cloudflare 环境下稳定对外提供服务同时也能与仓库 FAQ 目录 中的其他部署技巧如 supervisord 守护组合使用构建一套健壮的生产级实时通信设施。赞分享后端即时通讯【免费下载链接】laravel-websocketsWebsockets for Laravel. Done right.项目地址https://gitcode.com/gh_mirrors/la/laravel-websockets点击查看免费下载相关推荐Bouncy Castle Java终极加密算法库完整指南与快速入门Bouncy Castle Java终极加密算法库完整指南与快速入门 Bouncy Castle Java是一个功能全面的加密算法库为开发者提供了丰富的密码密码学应用安全Laravel WebSockets生产环境部署终极指南10个关键配置与优化技巧Laravel WebSockets生产环境部署终极指南10个关键配置与优化技巧 Laravel WebSockets是一款为Laravel框架打造的高性能W后端即时通讯Docker环境下Laravel生产环境部署指南Docker环境下Laravel生产环境部署指南 前言 在现代Web开发中Docker已成为部署PHP应用的标准工具之一。本文将详细介绍如何使用Docker文档教程上一篇解决Ubuntu系统下Netty的Epoll支持问题从异常到高性能网络编程下一篇告别检索低效LangChain4J 集成 Apache Lucene 实现极速全文检索的实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑