7

我想知道在 https 生产服务器上设置 Laravel Echo 的正确(或任何相关)方法是什么。我已经让它在我的本地 vagrant 上工作了一段时间,现在我已经将更改推送到生产中,我无法让脚本连接到节点服务器。这是我目前拥有的。

var echo = require('laravel-echo-server');

var options = {
    host: 'https://localhost',
    port: '6001',
    sslCertPath: '/etc/nginx/ssl/nginx.crt',
    sslKeyPath: '/etc/nginx/ssl/nginx.key'
};

echo.run(options);

然后在javascript中

import Echo from "laravel-echo"
window.echo = new Echo({
    broadcaster: 'socket.io',
    host: 'https://localhost:6001'
});

上面的配置是我开始的方式,但是我尝试了许多其他组合,包括尝试编辑 nginx 配置以一起绕过 https。如果绕过 https 是必需的方法,那么任何有关如何使用 Laravel Echo 执行此操作的建议都将不胜感激,因为我一直在引用的有关此主题的 socket.io 线程似乎对我没有帮助。

4

4 回答 4

9

这就是我解决问题的方法

首先。您必须使用 ssl 配置您的 nginx vhost(尚未连接 websocket)。我使用让我们加密(https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

第二。您可以在您的虚拟主机上创建一个路径来代理您的 websocket。这样 nginx 处理 ssl 协议,而且你不使用另一个端口

location /ws/{

    proxy_pass http://127.0.0.1:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $remote_addr;
}

之后,您的脚本将必须连接到` https://localhost/ws/

注意:我使用端口 3000 作为laravel-echo-server实例,而不是原始问题中所述的 6001

于 2017-03-27T12:53:22.587 回答
4

除了 user237329 响应之外,javascript 中的 laravel echo 设置应该是:

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.host,
    path: '/ws/socket.io',
});
于 2018-12-17T00:30:56.100 回答
0

我找到了解决这个问题的方法。使用 Forge 和 Let's Encrypt 时,Forge 将在月初创建具有唯一 ID 的文件夹,其中包含您的 SSL 密钥。起初,当我尝试使用这些密钥时,laravel-echo-server 说它找不到这些密钥。在我上面问题的代码中,我引用了我服务器上的另外两个密钥,我认为它们是指向本月正确密钥的符号链接,但事实并非如此。我确实需要参考唯一 ID 文件夹中的文件。为了让它工作,我只需要运行“ sudo node socket.js”。

于 2016-09-05T18:02:41.527 回答
0

也许有人会带着和我一样的问题来到这里。首先,请记住将不受信任的证书添加到浏览器异常中,因为对于 laravel 回显端口我们必须单独进行。否则,您只会在控制台中拒绝连接。其次,当前版本的 laravel echo 不接受 host 选项中的协议,而是在一个名为 'protocol' 的单独选项中。

于 2016-11-03T22:01:30.677 回答