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 设置。
你为什么不使用 /apps 和 /app 而不是 @ws ??