laravel - Laravel-websockets 无法通过 nginx 在 plesk 的 VPS 服务器上运行
问题描述
我正在使用 laravel-websockets 和 pusher 包在我的应用程序中运行一个简单的聊天功能。我设法使用代客开发环境的 ssl 证书使其在本地工作。现在,我处于开发的最后阶段,我将应用程序放在我的 VPS 服务器上,创建了 ssl 证书,一切正常,但我无法让 websockets 服务器正常工作。我正在使用带有 plesk 的 ubuntu 服务器,并通过 nginx 运行我的应用程序。 目前在控制台中收到此错误
广播.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,
]
],
],
引导程序.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://<your_domain>/chat_ws/ 作为聊天 websocket 服务器端点(在您的 javascript 中)
根据我的记忆,在我的情况下工作正常:nginx 将反向代理请求,并且不允许直接通过 https 的 websocket
推荐阅读
- delphi - 窗体标题在 Windows 10 上左对齐。BidiMode 是 RightToLeft
- excel - 获取不在办公室的文本
- php - setRedirectUri 的作用是什么?
- jakarta-ee - 如何在 2 个不同的环境中正确处理某些 WSO2 ESB REST API 的部署?(目前包含硬编码的 HATEOAS 链接)
- javascript - 在画布矩形上用间距分割线
- sapui5 - Eslint : sap-no-ui5-prop-warning
- css - 显示包含具有相同大小的不同大小图像的精灵
- c# - 负载均衡器更改后,HttpClient 停止重用连接
- python - Python:删除以 NaN 命名的列
- xpath - 如果满足条件,则修改 XML 配置 - Ansible