我正在尝试(!)在我的本地设置中使用 laravel reverb (dockerized php-fpm nginx mysql ) 但无论我不断获得什么端口或主机
WebSocket connection to 'ws://127.0.0.1:8070/app/02f265e93304b96ba8d8?protocol=7&client=js&version=8.3.0&flash=false' failed:
这让我很烦恼,因为我非常确定环境变量并尝试了一切......
根据我目前的情况,您可以做出以下一些假设:
1- Ran reverb:start 在 php-fpm 容器内(我不确定这是最好的方法)
2-将环境变量设置为正确的值
3-根本没有设置ssl证书。
4-已经有 echo.js 推送器和广播设置。
感谢任何想法。
检查端口 (8070) 是否在您的 Docker 配置 (docker-compose.yml) 中公开并映射到主机。您可能需要类似的东西: 服务-->php-fpm-->端口-->8070:8070
使用 localhost 而不是 127.0.0.1 进行 WebSocket 连接,因为容器内的 127.0.0.1 指的是容器本身。
如果未正确映射到外部服务,或者 WebSocket 服务器尝试绑定到 127.0.0.1,则在 PHP-FPM 容器内运行 reverb:start 可能会导致问题。 考虑在容器外运行 Reverb,或检查容器日志以确保不存在权限问题。
NGINX 反向代理配置
location /app/ {
proxy_pass http://127.0.0.1:8070;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
虽然您没有使用 SSL,但值得注意的是,现代浏览器可能会阻止不安全的 WebSocket 连接,尤其是在生产环境中。当您转向生产时请考虑设置 SSL 以避免此类问题。
PHP-FPM 通常不直接服务 WebSocket 请求。确保 PHP-FPM 不会干扰 WebSocket 服务器,并在可能的情况下考虑独立运行 WebSocket 服务器。