我正在尝试使用 SSL 运行 fastapi 应用程序。
我正在使用 uvicorn 运行该应用程序。
我可以使用 HTTP 在端口 80 上运行服务器,
if __name__ == '__main__':
uvicorn.run("main:app", port=80, host='0.0.0.0', reload = True, reload_dirs = ["html_files"])
Run Code Online (Sandbox Code Playgroud)
要使用 HTTPS 运行端口,我执行以下操作:
if __name__ == '__main__':
uvicorn.run("main:app", port=443, host='0.0.0.0', reload = True, reload_dirs = ["html_files"], ssl_keyfile="/etc/letsencrypt/live/my_domain/privkey.pem", ssl_certfile="/etc/letsencrypt/live/my_domain/fullchain.pem")
Run Code Online (Sandbox Code Playgroud)
我如何运行两者或简单地集成 https 重定向?
注意:这是在我不想使用 nginx 的服务器上进行的设置,我知道如何使用 nginx 来实现 https 重定向。
我将 Flask 中由 waitress 提供的应用程序迁移到由 uvicorn 提供的 FastAPI,但我无法强制链接(由 index.html 模板内的 url_for 生成)使用 HTTPS 而不是 HTTP。
我和女服务员一起使用:
from waitress import serve
import flask_app
PORT=5000
HOST_IP_ADDRESS='0.0.0.0'
serve(flask_app.app, host=HOST_IP_ADDRESS, port=PORT, url_scheme="https")
Run Code Online (Sandbox Code Playgroud)
对于 uvicorn,我尝试使用 proxy_headers,但这不起作用。我在index.html中使用了解决方法
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Run Code Online (Sandbox Code Playgroud)
它正确地从静态文件加载了 style.css,但到另一个端点的链接仍然使用 HTTP。
有没有一种简单的方法可以强制 url_for 创建的所有链接都使用 HTTPS?