【问题标题】:Laravel-websockets not working on VPS server with plesk through nginxLaravel-websockets 无法通过 nginx 在 plesk 的 VPS 服务器上运行
【发布时间】:2021-04-26 09:25:39
【问题描述】:

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

广播.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}"

【问题讨论】:

  • 欢迎来到 SO.. 根据您的错误,您需要运行 npm run prod 以获取 MIX_PUSHER_APP_KEYMIX_PUSHER_APP_CLUSTERphp artisan config:clear 的最新数据
  • 已经做了,什么都没做
  • 然后确保 BROADCAST_DRIVER=pusher 和所有 env 到达 js 文件
  • 您的端口是否工作/打开并且防火墙配置正确?你在使用 HTTPS 吗?我遇到了类似的问题。你在哪个端口收听?
  • 我监听端口 6001 @Jack

标签: laravel nginx plesk pusher laravel-websockets


【解决方案1】:

根据我的经验,我在使用 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

【讨论】:

  • 你知道如何通过plesk覆盖nginx配置文件吗?当我尝试对请求进行反向代理时,在 nginx.conf 之上写入该文件是从 plesk 生成的,不应编辑
  • 就是这样。通过 plesk 界面。这些规则已添加到默认配置文件中
  • 我正在尝试将新位置放入额外的 nginx 指令中,如下所示:location /app{ .......... } 但我收到此错误:无效的 nginx 配置:nginx:[emerg] 未知指令“”在 /var/ www/vhosts/system/mydomain.com/conf/vhost_nginx.conf:2 nginx:配置文件/etc/nginx/nginx.conf测试失败
  • 对不起,我不是 nginx 专家。有了 plesk,我发现这是一个很好的解决方案。对不起队友
猜你喜欢
  • 2023-01-20
  • 2014-12-14
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2017-02-21
  • 2020-05-16
相关资源
最近更新 更多