Laravel Reverb:解决本地 webSocket SSL 连接问题

问题描述 投票:0回答:1

Laravel (11.9) 混响(1.0)

如果您在通过 HTTPS 和自签名证书使用 Laravel Reverb 时遇到错误,这里的解决方案可能会有所帮助。在解决这个问题几个小时后,我找到了一个有效的解决方案。这是您需要做的:

1。更新您的 .env File

确保 REVERB_SCHEME 设置为 https:

REVERB_SCHEME=https
SSL_CERTIFICATE=path/to/file.crt
SSL_CERTIFICATE_KEY=path/to/file.key

2。配置Nginx

这是 Reverb 的 Nginx 配置示例:

# Route traffic to Reverb (broadcasting)
location @ws {
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header Scheme $scheme;
    proxy_set_header SERVER_PORT $server_port;
    proxy_set_header REMOTE_ADDR $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";

    proxy_pass http://0.0.0.0:8080;
}

3.更新config/reverb.php

确保指向本地证书和密钥,如果使用自签名证书,请将 verify_peer 设置为 false:

'options' => [
    'tls' => [
        'local_cert' => env('SSL_CERTIFICATE'),
        'local_pk' => env('SSL_CERTIFICATE_KEY'),
        'verify_peer' => env('APP_ENV') !== 'local',
    ],
],

4。更新config/broadcasting.php

同样,配置 Guzzle 客户端选项以禁用本地环境的验证:

'client_options' => [
    // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
    'verify' => env('APP_ENV') !== 'local',
],

5。暴露8080端口

如果您使用 Docker,请确保端口 8080 公开。

此设置应该可以帮助您解决与使用带有 HTTPS 和自签名证书的 Laravel Reverb 相关的问题:)

回顾:

最初,我遇到了 Nginx 配置问题。 Laravel 文档中的默认配置不正确,因为 location / 指令已在使用中。相反,我需要使用@ws。

随后,我很难访问 8080 端口,因为我忘记公开它了。

即使在暴露端口之后,尽管将 REVERB_SCHEME 设置为 https,但 Websocket 仍然可以通过 HTTP 工作,但通过 HTTPS 失败。

最后,我注意到控制台和应用程序日志中存在错误,这导致我发现了不正确的 verify_peer 设置。

laravel ssl websocket https laravel-reverb
1个回答
0
投票

你为什么不使用 /apps 和 /app 而不是 @ws ??

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.