【问题标题】:How to use Laravel Echo on production server with https如何通过 https 在生产服务器上使用 Laravel Echo
【发布时间】:2017-01-11 15:02:59
【问题描述】:

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

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 线程似乎对我没有帮助。

【问题讨论】:

    标签: node.js nginx socket.io laravel-5.3


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 虽然这可能是解决问题的宝贵提示,但答案确实需要证明解决方案。请edit 提供示例代码来说明您的意思。或者,请考虑将其写为评论。
      【解决方案3】:

      这就是我解决问题的方法

      首先。您必须使用 ssl 配置您的 nginx vhost(尚未连接 websocket)。我用 Let's encrypt (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

      【讨论】:

      • 这是一个非常有趣的方法,喜欢它。我很好奇为什么当 Laravel Echo Server 使用端口 6001 时你有端口 3000。另外,你是否会将 Laravel Echo Server 配置为在没有 https 的情况下运行,这样它就不会尝试访问它没有读取权限的证书开吗?
      • 你是对的,在问题中它被描述为 6001 端口。你应该使用那个端口。我使用 3000 端口,它可以是任何其他未使用的端口。
      • 我试图运行这个sudo service nginx restart,但我收到了这个错误nginx: [emerg] unknown directive "proxy_set_hearder" in /etc/nginx/conf.d/virtual.conf:5 nginx: configuration file /etc/nginx/nginx.conf test failed
      • @IkechukwuKalu : nginx -t 用于检查 nginx 配置。你有一个错字 proxy_set_hearder 而不是 proxy_set_header
      • 感谢您的回答,但我该如何处理呢?我正在同时运行 apache 和 nginx。我的 apache 在端口 80 上运行,我的 nginx 在端口 8080 上运行。你有任何链接可以参考我,以使我从 laravel-echo-server 的投票停止失败?
      【解决方案4】:

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

      window.Echo = new Echo({
          broadcaster: 'socket.io',
          host: window.host,
          path: '/ws/socket.io',
      });
      

      【讨论】:

      • 谢谢!对我来说,我需要的是正确的host 属性。我改为设置/socket.io。我不必设置path 部分,因为我已经代理了默认的/socket.io 而不是/ws/socket.io。
      猜你喜欢
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2015-12-01
      • 2019-09-13
      • 2018-03-23
      • 2011-11-16
      • 2021-10-21
      • 2015-02-26
      相关资源
      最近更新 更多