将 Laravel Echo 与 docker 一起使用(CORS 问题)

Posted

技术标签:

【中文标题】将 Laravel Echo 与 docker 一起使用(CORS 问题)【英文标题】:Use Laravel Echo with docker (CORS Problem) 【发布时间】:2019-09-15 06:52:45 【问题描述】:

我想通过以下方式使用 Laravel Echo:

我有两个 docker 容器,一个用于 laravel (php),一个用于套接字服务器 (https://hub.docker.com/r/mintopia/laravel-echo-server)。

现在我遇到了问题,由于 CORS,Laravel Echo 无法连接到服务器。

我已经为 echo 服务器找到了一个选项,因此我将 ECHO_ALLOW_ORIGIN=http://php:80 添加到环境变量中。不幸的是,这没有任何改变。

谁能告诉我如何解决这个问题?

【问题讨论】:

【参考方案1】:

我使用 k1sliy/laravel-echo-server,但位置/命令应该相似。

您与您的 TSL/SSL 证书和 laravel-echo-server.json 或仅文件本身共享一个目录。例如,我以类似的方式开始我的(注意我认为我的端口对于 echo 来说是非标准的,因为我需要一个 cloudflare 将代理):

docker run -d --name echo \
-p 8443:8443 \
-v YOURPATH/laravel-echo-server.json:/app/laravel-echo-server.json \
-v YOURPATH/privkey.pem:/app/privkey.pem \
-v YOURPATH/cert.pem:/app/cert.pem k1sliy/laravel-echo-server

您需要编辑 laravel-echo-server.json 文件并确保其中包含此文件(其中 YOUR_ORIGIN_HERE 是您要允许的来源)并销毁并重新创建 docker 容器以强制它重新读取配置:

  "apiOriginAllow": 
        "allowCors": true,
        "allowOrigin": " YOUR_ORIGIN_HERE ",
        "allowMethods": "OPTIONS, GET, POST",
        "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
    

原点是主机/客户端浏览器看到的原点。 php 可能是映射到私有 172 网络的 docker 容器中的主机名——这可能不是您想要的。您希望它是您在浏览器的地址栏(无协议)中输入的任何内容以访问该站点,可能是 128.0.0.1localhost192.168.XX,后跟冒号和端口(可能是 80 或 443 ...您还可以为端口做一个 * 以允许任何端口与回显服务器对话)。

【讨论】:

以上是关于将 Laravel Echo 与 docker 一起使用(CORS 问题)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel-echo-server 码头化问题

SQLState [HY000] 连接拒绝 Laravel 与 docker

使用 Laravel Echo、laravel-echo-server 和 socket.io 广播将不起作用

PHP Laravel - 如何将 Spatie Async 用于并发函数

不使用 npm 将 laravel-echo 和 pusher-js 安装为一个简单的 js 文件

Laravel Echo 私人频道和 Laravel echo 服务器 |雷迪斯