【问题标题】:Laravel Echo Server - Socket.io - Polling failsLaravel Echo 服务器 - Socket.io - 轮询失败
【发布时间】:2018-06-17 15:10:16
【问题描述】:

Laravel Echo 服务器通过以下方式启动:

laravel-echo-server start 并且运行良好:

L A R A V E L  E C H O  S E R V E R

version 1.3.1

Starting server...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

CHANNEL private-user:09222583-ef73-5640-bcc8-062b36c4f380.d3d0a4d2-0c95-5f5f-aea4-1dfe1fa36483

但是,在前端,轮询似乎失败了。网络选项卡显示请求不断尝试连接并失败:

网址如下所示: https://example.com:6001/socket.io/?EIO=3&transport=polling&t=MGEIXhf

laravel-echo-server.json 看起来像这样:

{
    "authHost": "https://example.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "host": "127.0.0.1",
            "password": "56df4h5dfg4"
        }
    },
    "devMode": false,
    "host": null,
    "port": "6001",
    "protocol": "https",
    "socketio": {},
    "sslCertPath": "/etc/nginx/ssl/example_com/ssl-bundle.crt",
    "sslKeyPath": "/etc/nginx/ssl/example_com/example_com.key",
    "sslCertChainPath": "",
    "sslPassphrase": ""
}

6001 的端口似乎在ufw 中打开:

Status: active

To                         Action      From
--                         ------      ----
...
6001                       ALLOW       Anywhere
...
6001 (v6)                  ALLOW       Anywhere (v6)
...

【问题讨论】:

  • 你成功了吗?

标签: laravel sockets socket.io laravel-echo


【解决方案1】:

验证您是否也在 js 文件中使用了相同的端口号。

import Echo from 'laravel-echo'
window.io = require('socket.io-client');
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'});

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。在我的本地设置中,一切正常,但在暂存时,液滴ufw 阻止了每个传入请求/var/log/ufw.log 显示它们都被阻止了。我已经在ufw 中打开了 6001,我什至将我的 IP 访问权授予了ufw 中的所有内容,但请求仍然被阻止。

    虽然我真的不希望有安全风险,但我暂时禁用了ufw,一切都开始工作,立即建立连接,没有超时。然后我很快再次启用ufw,一切都在继续工作。我在其他浏览器中测试了新连接 - 一切正常。

    因此,尽管尝试关闭并重新打开防火墙确实是个糟糕的建议,但它确实对我有用。

    我希望其他人可以提出以安全方式诊断和修复此类UFW 问题的方法。

    【讨论】:

      【解决方案3】:

      我在我的情况下找到了问题的原因。

      我用 ufw 设置的第一条规则是允许 ssh 流量。 然后我安装了fail2ban,该过程的一部分使用iptables-persistent保存了iptables。

      后来我添加了一条 ufw 规则以允许 6001 一切正常。

      重启后 6001 停止打开,即使它在 ufw 的状态输出中被列为打开 - 它不工作的原因是 iptables 已恢复,并在添加 6001 规则之前获取了副本。

      所以如果你有 iptables-persistent 运行确保你使用

      sudo dpkg-reconfigure iptables-persistent
      

      在添加任何新的 ufw 规则之后。

      【讨论】:

        猜你喜欢
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 2016-02-15
        • 2019-02-08
        • 2017-01-10
        • 1970-01-01
        相关资源
        最近更新 更多