如何在cPanel上配置BeyondCode Laravel-Websocket(含/不含SSL)
cPanel 配置 BeyondCode Laravel WebSockets 分步指南
1. 确认服务器端口权限
cPanel 主机通常会限制对外公开端口,默认6001端口可能无法直接访问:
- 登录cPanel,找到**防火墙(Firewall)**工具,添加入站规则开放6001端口;
- 若主机商禁止自定义端口,后续需通过反向代理,用80/443端口转发WebSocket请求。
2. 核心配置文件修改
2.1 config/broadcasting.php
调整Pusher连接配置,重点修正内部通信地址:
'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => env('APP_ENV') === 'production', // 生产环境建议开启TLS 'encrypted' => env('APP_ENV') === 'production', 'host' => '127.0.0.1', // WebSocket服务在本地运行,用内部地址即可 'port' => 6001, 'scheme' => env('APP_ENV') === 'production' ? 'https' : 'http', 'curl_options' => [ CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, ], // 开启TLS但未配置证书时临时关闭验证(生产环境不建议) ], ], ]
host设为127.0.0.1:后端与WebSocket服务为内部通信,无需使用公网域名;- 生产环境同步开启
useTLS、encrypted,并将scheme设为https。
2.2 resources/js/bootstrap.js
适配cPanel项目子路径,调整前端Echo配置:
window._ = require('lodash'); window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, forceTLS: process.env.APP_ENV === 'production', wsHost: window.location.hostname, wsPort: 6001, wssPort: 6001, // 生产环境开启TLS时使用 encrypted: process.env.APP_ENV === 'production', enabledTransports: ['ws', 'wss'], path: '/projects/myproject/laravel-websockets', // 对应cPanel项目子路径 });
- 添加
path参数:项目部署在public_html/projects/myproject,WebSocket请求需带上子路径,匹配Laravel WebSockets的路由前缀; - 生产环境同步开启
forceTLS和encrypted,配置wssPort。
2.3 .env 文件
确保环境变量与配置匹配:
APP_ENV=production APP_URL=https://your-domain.com/projects/myproject PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=mt1 # 或你的集群标识,本地环境可留空 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT= # 生产环境填写SSL证书路径 LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=
APP_URL必须包含完整的项目子路径;- 生产环境配置SSL证书路径,对应
broadcasting.php的TLS设置。
2.4 config/websockets.php
调整服务监听范围与跨域规则:
'apps' => [ [ 'id' => env('PUSHER_APP_ID'), 'name' => env('APP_NAME'), 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'path' => env('LARAVEL_WEBSOCKETS_PATH', '/laravel-websockets'), 'capacity' => null, 'enable_client_messages' => false, 'enable_statistics' => true, ], ], 'server' => [ 'host' => '0.0.0.0', // 允许所有地址监听服务 'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), ], 'allowed_origins' => [ 'https://your-domain.com', 'http://your-domain.com', ],
server.host设为0.0.0.0,确保服务能被外部访问;allowed_origins添加你的域名,避免跨域拦截。
3. 在cPanel中启动WebSocket服务
cPanel无法直接通过命令行长期运行进程,可选择以下方式:
- 方式1:使用cPanel进程管理器
- 打开cPanel的Process Manager工具;
- 点击Add Process,输入启动命令:
php /home/your-cpanel-user/public_html/projects/myproject/artisan websockets:serve - 设置进程名称,选择Persistent(持久化),保存启动。
- 方式2:SSH+Screen后台运行
- 通过SSH登录服务器,执行:
screen -dmS laravel-websockets php /home/your-cpanel-user/public_html/projects/myproject/artisan websockets:serve - 后续可通过
screen -r laravel-websockets查看进程日志。
- 通过SSH登录服务器,执行:
4. 反向代理配置(可选,若端口无法访问)
若主机商禁止6001端口,在public_html/projects/myproject/public目录的.htaccess中添加反向代理规则:
RewriteEngine On # WebSocket反向代理 RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule ^laravel-websockets/(.*) ws://127.0.0.1:6001/laravel-websockets/$1 [P,L] # HTTP反向代理(用于仪表盘) RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule ^laravel-websockets/(.*) http://127.0.0.1:6001/laravel-websockets/$1 [P,L]
同时修改bootstrap.js,去掉wsPort和wssPort,将端口改为80(http)或443(https),添加disableStats: false(如需访问仪表盘)。
5. 测试连接
- 重新编译前端资源:
npm run prod - 访问WebSocket仪表盘:
https://your-domain.com/projects/myproject/laravel-websockets,确认服务状态正常; - 在前端页面打开浏览器控制台,查看WebSocket连接日志,或发送测试事件验证功能。
内容的提问来源于stack exchange,提问作者Rashad Khan
相关产品推荐
相关产品推荐

