1

我正在尝试在 Heroku 中部署一个提供 HTTP/2 支持的 actix-web示例,在稍微修改它以监听提供的$PORT数字以及加载证书的方式之后——而不是从文件,它从环境中获取公钥和私钥。

问题是,对于每个请求,Heroku 路由器都会记录连接已关闭而没有响应。

heroku[router]: 
at=error
code=H13
desc="Connection closed without response"
method=GET
status=503
bytes=0
protocol=https

由于它在本地工作,我怀疑问题出在我的测功机配置上,这是一个爱好(7 美元/月),尤其是在证书部分。由于应用程序希望从环境变量中接收证书信息,并且 Heroku 不会为您提供对其证书的访问权限(例如 xxxxx.herokuapp.com 的证书),因此我购买了一个域名,希望能自己生成。我做到了,使用以下页面

使用自行生成的证书,到目前为止,我已经尝试了以下操作,导致出现以下错误的任何情况:

  1. 为测功机和应用程序提供相同的密钥对。日志产生上述错误。
  2. 不是向测功机提供 SSL 配置,而是向应用程序提供 SSL 配置。所以,https访问被禁用,甚至没有击中测功机。
  3. 不是向应用程序提供证书配置,而是向测功机提供证书配置。该应用程序在启动时崩溃。

但是,如果我删除相关rustls行,一切都会顺利进行,但使用的协议是HTTP/1.1.

因此,我想请问您:

  • 让应用程序期望加载证书有什么根本上的坏处吗?
  • 我应该尝试其他提供商吗?(例如 DigitalOcean、AWS、谷歌云)
  • 你知道什么可以使它在 Heroku 中工作吗?
4

1 回答 1

4

我刚刚发现 Heroku 当时不支持 HTTP/2(来源):

Heroku 目前不支持 HTTP/2,尽管将来可能会改变。您可以在此处了解我们当前支持的 HTTP 协议:https ://devcenter.heroku.com/articles/http-routing#http-versions-supported

对于任何未来的发展,我们建议订阅Heroku Changelog。这将使您提前了解更新、改进和弃用,以便您可以进行任何必要的调整。

于 2019-02-10T17:12:58.797 回答