首页 > 解决方案 > 将 Laravel Echo 与 docker 一起使用(CORS 问题)

问题描述

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

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

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

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

有人可以告诉我如何解决这个问题吗?

标签: laraveldockerwebsocketcorslaravel-echo

解决方案


我使用 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.1XX,后跟冒号和端口(可能是 80 或 443 ...您也可以执行 *用于端口以允许任何端口与回显服务器对话)。localhost192.168.


推荐阅读