Laravel websockets无法通过nginx在带有plesk的VPS服务器上运行

Laravel websockets无法通过nginx在带有plesk的VPS服务器上运行,laravel,nginx,plesk,pusher,laravel-websockets,Laravel,Nginx,Plesk,Pusher,Laravel Websockets,我正在使用LaravelWebSocket和pusher包在我的应用程序中运行一个简单的聊天功能。我设法使用代客开发环境的ssl证书使其在本地工作。现在,我正处于开发的最后阶段,我把我的应用程序放在我的VPS服务器上,创建了ssl证书,一切都很好,但我无法让websockets服务器工作。我正在使用一个带有plesk的ubuntu服务器,我通过nginx运行我的应用程序。 broadcasting.php 'pusher' => [ 'driver' => 'pu

我正在使用LaravelWebSocket和pusher包在我的应用程序中运行一个简单的聊天功能。我设法使用代客开发环境的ssl证书使其在本地工作。现在,我正处于开发的最后阶段,我把我的应用程序放在我的VPS服务器上,创建了ssl证书,一切都很好,但我无法让websockets服务器工作。我正在使用一个带有plesk的ubuntu服务器,我通过nginx运行我的应用程序。

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(我将在生产中更改推送者凭据)


根据我的经验,我对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]
#当存在升级:websocket头时,重定向到ws
#使用NC标志(不区分大小写),因为某些浏览器将通过Websocket
RewriteCond%{HTTP:Upgrade}=websocket[NC]
重写规则^/chat_ws/(*)ws://:6001[P,L]
在此之后,您必须使用http:///chat_ws/ 作为聊天websocket服务器端点(在javascript中)


在我的例子中,根据我的记忆,工作正常:nginx将反向代理请求,不允许通过https直接使用websocket

欢迎使用SO。。根据您的错误,您需要运行
npm run prod
,以获取
MIX\u PUSHER\u APP\u KEY
MIX\u PUSHER\u APP\u CLUSTER
php artisan config:clear
的最新数据,没有做任何事情确保
BROADCAST\u DRIVER=pusher
和所有到达js文件的环境都正常工作/打开并且防火墙配置正确?你在使用HTTPS吗?我面临着类似的问题。你在哪个端口上登录?我在听端口6001@jack你知道如何通过plesk覆盖nginx配置文件吗。当我尝试反向代理请求时,在nginx.conf的顶部写着这个文件是从plesk生成的,不应该被编辑,就是这样。通过plesk接口。这些规则被添加到默认配置文件中。我正在尝试将新位置放入其他nginx指令中,如下所示:
location/app{………}
,但我收到以下错误:无效的nginx配置:nginx:[emerg]未知指令“”在/var/www/vhosts/system/mydomain.com/conf/vhost_nginx.conf:2 nginx:configuration file/etc/nginx/nginx.conf test failed很抱歉,我不是nginx专家。对于普莱斯克,我发现这是一个很好的解决方案。对不起,伙计
# 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]