如何解决Laravel-websockets 无法通过 nginx
我正在使用 laravel-websockets 和 pusher 包在我的应用程序中运行一个简单的聊天功能。我设法使用代客开发环境的 ssl 证书使其在本地工作。现在,我处于开发的最后阶段,我将我的应用程序放在我的 VPS 服务器上,创建了 ssl 证书,一切正常,但我无法让 websockets 服务器工作。我正在使用带有 plesk 的 ubuntu 服务器,并通过 nginx 运行我的应用程序。 Currently Getting this error in the console
broadcasting.php
'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' => true,'encrypted' => true,'host' => '127.0.0.1','port' => 6001,'scheme' => 'https','curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,CURLOPT_SSL_VERIFYPEER => 0,]
],],
bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',wsHost: window.location.hostname,wsPort: 6001,wssPort: 6001,key: process.env.MIX_PUSHER_APP_KEY,cluster: process.env.MIX_PUSHER_APP_CLUSTER,disableStats: true,forceTLS: true
});
.env(我将在生产中更改推送器凭据)
PUSHER_APP_ID=12345
PUSHER_APP_KEY=ABCDEFG
PUSHER_APP_SECRET=HIJKLMNOP
PUSHER_APP_CLUSTER=mt1
LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT=localhost.crt
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=localhost.key
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
解决方法
根据我的经验,我在使用 Plesk 和 Nginx+Apache 时遇到了类似的问题。 经过大量研究和测试,我找到了这个解决方案,它在 prod env 中有效:
登录 plesk 并打开您的域配置 > Apache 和 Nginx 设置 > HTTPS 的其他设置
(可能不同,因为我的服务器语言不是英语。)
在那个框中输入:
# When Upgrade:websocket header is present,redirect to ws
# Using NC flag (case-insensitive) as some browsers will pass Websocket
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule ^/chat_ws/(.*) ws://<your_domain>:6001 [P,L]
此后,您必须使用 http://
在我的情况下工作正常,据我所知:nginx 将反向代理请求,并且不允许直接通过 https 的 websocket
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。