繁体   English   中英

Laravel websockets AWS EC2 - 连接失败

[英]Laravel websockets AWS EC2 - Connection failed

我正在使用 laravel-websockets 并且在我的本地 docker 机器上工作得很好,但是当我将它部署在 AWS EC2 机器上时,我似乎无法让它工作。

这是我收到的错误消息:

pusher.min.js:8 WebSocket connection to 
'wss://sample.project:6001/app/b0901feacd04936e?protocol=7&client=js&version=4.3.1&flash=false' failed:

这些是我的配置文件:

广播.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'),
                'host' => '127.0.0.1',
                'port' => 6001,
                'scheme' => 'http',
            ],
        ],

websockets.php

    'apps' => [
        [
            'id' => env('PUSHER_APP_ID'),
            'name' => env('APP_NAME'),
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'enable_client_messages' => false,
            'enable_statistics' => true,
        ],
    ],

引导程序.js

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    wsHost: window.location.hostname,
    wsPort: 6001,
    forceTLS: false,
    disableStats: true,
});

我在我的安全组中打开了 6001 端口: 在此处输入图像描述

但我不能让它工作。 我在其他 SO 问题中尝试了很多修复,但都没有奏效,我错过了什么吗? 这里急需帮助。

非常感谢。

您在config/websockets.php中的 SSL 设置应该表明它们需要.env文件中的两个变量。

'ssl' => [
    'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),
    'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),
    'passphrase' => null,
    'verify_peer' => false,
],

然后在您的.env文件中,为本地(在 Valet 中)指定您的测试站点的证书,即:

LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT="/users/grant/.config/valet/Certificates/localsite.test.crt"
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK="/users/grant/.config/valet/Certificates/localsite.test.key"

或者,如果它在您的生产环境中,请将其指向您的生产 SSL CRT 和密钥:

LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT="/etc/nginx/ssl/yourprodsite.com/1231342/server.crt"
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK="/etc/nginx/ssl/yourprodsite.com/1231342/server.key"

您的bootstrap.js (或类似的)接收 JS 端不会真正改变 - 只需确保它与config/broadcasting.php中的内容匹配:

import Echo from 'laravel-echo';
window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'yoursite-pusher-key',
    wsHost: window.location.hostname,
    wsPort: 6001,
    wssPort: 6001,
    disableStats: true,
});

connections数组中配置对应的config/broadcasting.php

'pusher' => [
    'driver' => 'pusher',
    'key' => 'yoursite-pusher-key',
    'secret' => 'yoursite-secret',
    'app_id' => 'yoursite',
    'options' => [
        'cluster' => 'main-cluster',
        'encrypted' => true,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'https',
        'curl_options' => [
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
        ]
    ],
],

就个人而言,如果没有 SSL,我无法让我的设置正常工作,并且必须准确地提供 SSL 证书。 如果使用 Valet,请不要忘记在本地使用valet secure

您可以在此处查看有关 SSL 的更多信息。

使用php artisan websockets:serve服务 Websockets 后,如果它似乎停止运行,就可以了,导航到前端和硬刷新 (CMD+SHIFT+R) 或 Win (CTRL+F5) 并希望建立连接。

确保您使用的是最新的库,并且如果您在引导程序中设置了 JavaScript 初始化脚本,您可能需要运行npm run dev或类似的工具来编译资产。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM