我有一个安装在FastAPI应用程序上的Gradio应用程序,并托管在Heroku上,该应用程序应该请求音频输入权限。本地工作,但这不是生产的情况。通过一些研究,我发现浏览器通过http阻止这种权限(你能确认吗?),所以我认为我必须配置uvicorn运行https。我在documentation中发现了这一点
$ uvicorn example:app --port 5000 --ssl-keyfile=./key.pem --ssl-certfile=./cert.pem
我怎样才能访问heroku中的ssl文件。这是我应该做的吗?有人能帮我吗?
1条答案
按热度按时间db2dz4w81#
这不是Uvicorn的责任。
如果您使用的是默认的
your-app.herokuapp.com
域,或者如果您使用的是Basic或Professional层dynos,HTTPS应该已经可用。如果您使用的是Eco dynos的自定义域,最简单的解决方案¹是升级到Basic dynos以访问automated certificate management(ACM),它在底层使用Let's Encrypt:
如果您的应用当前运行在eco dynos上,Heroku会在您升级应用以使用Basic或Professional dynos时自动启用ACM:
HTTPS * 可用 * 后,您可能需要配置从HTTP到HTTPS的重定向。Heroku不会为您执行此操作。请参考Flask安全指南,Heroku recommends使用
flask-talisman
执行此操作。flask-talisman
可配置多个与安全相关的最佳实践,包括从HTTP到HTTPS的重定向。¹如果您不想这样做,另一种选择是通过Heroku SSL提供自己的证书。这需要更多的工作,而且由于您必须提供自己的证书,因此可能会带来巨大的财务成本。