微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel-websockets 无法通过 nginx

如何解决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:///chat_ws/ 作为聊天 websocket 服务器端点(在您的 javascript 中)

在我的情况下工作正常,据我所知:nginx 将反向代理请求,并且不允许直接通过 https 的 websocket

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。