【问题标题】:Is it possible to deploy Daphne SSL on EC2 without the need for Nginx?是否可以在不需要 Nginx 的情况下在 EC2 上部署 Daphne SSL?
【发布时间】:2021-04-29 20:51:32
【问题描述】:

我正在尝试通过 Daphne 使用 Django 频道进行原型制作。结构如图所示。当我在没有 SSL (wss) 的情况下部署它时,一切正常(它连接、发送消息等)。我继续在本地使用 wss,使用自签名证书,它也可以工作。但是当通过在 EC2(云)中部署它来测试它时,它会等待很长时间,最后它说连接失败,在后端日志中,它甚至没有显示连接请求尝试到达。

这就是我在 Daphne - EC2 上部署的方式,带有自签名证书(因为这是一个测试)。注意:8000端口在安全组中是开放的。

daphne -e ssl:8000:privateKey=key.pem:certKey=cert.pem prototype.asgi:application

并使用我正在使用的本地前端(Angular):

angular.json

[...]

"serve": {
[...]

    "options": {
        "sslKey": "src/assets/key.pem",
        "sslCert": "src/assets/cert.pem"
    }

[...]

}

[...]

Websocket 调用

private initChannel(arg: string, arg2: string) { 
    this.webSocketSubject = webSocket('wss://' + this.EC2_IP + ':8000/prototype/?arg=' + arg + '&arg2=' + arg2);
}

部署命令:

ng serve --ssl

你突然知道可能会发生什么?

我已经看到大多数通过 nginx 部署它,但原型纯粹是通过 websocket(通道),所以目前不需要平衡器或代理。此部署是否必须使用 Nginx?

【问题讨论】:

    标签: ssl amazon-ec2 django-channels daphne


    【解决方案1】:

    我的问题是 SSL / TLS 证书。为了能够通过 HTTPS 建立连接,它需要一个 SSL/TLS 证书,该证书适用于被调用/使用的域。这就是为什么当我在本地生成测试证书时它工作的原因,因为我是本地主机的所有者。但在云端,每个实例都管理自己的域,属于管理实例的云公司,因此无法通过 HTTPS 接收请求。

    因此,如果它可以在不需要反向代理 (nginx) 的情况下进行部署,并且为此您必须生成一个指向云中实例 IP 的 DNS 域(例如在 GoDaddy 中,AWS 有 Route 53并且有很多)。由于域是您的并指向您有权管理的实例,因此您可以从 Let's Encrypt(或任何证书颁发机构,但付费)生成免费证书。在 Let's Encrypt 的情况下,我使用了Lego library。使用此库在我获得的域中为我生成的证书和密钥,并指向我的实例的 IP,我运行了下面的命令,它工作正常。

    daphne -e ssl:8000:privateKey=my.domain.key:certKey=my.domain.crt prototype.asgi:application
    

    请记住,如果您想为特定 IP(链接到 DNS 域的 IP)运行 ASGI 服务器 Daphne,您可以运行以下命令。

    daphne -e ssl:port=8002:interface=192.168.1.70:privateKey=my.domain.key:certKey=my.domain.crt chat.asgi:application
    

    【讨论】:

      猜你喜欢
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2018-01-17
      相关资源
      最近更新 更多