url_for 在 FastAPI 中使用 HTTP 而不是 HTTPS

ket*_*col 3 python https jinja2 fastapi uvicorn

我有一个 html 文件,我配置了链接的 URL,如下所示。

app.mount("/static", StaticFiles(directory="static"), name="static")

{{ url_for('static', path='css/style.css') }}
Run Code Online (Sandbox Code Playgroud)

我已经使用 nginx 和 haproxy 为应用程序创建了域。

加载 html 页面时,不会加载 css 和 js 样式,因为它使用的是 http 而不是 https。

Flask url_for 在 docker 运行时生成 http 而不是 https

Jinja2 模板中 url_for 创建的 FastAPI 链接使用 HTTP 而不是 HTTPS

我使用了一些关于类似问题的链接,但没有帮助,因为它是针对 html 文件的。

当我硬编码时它起作用了。我怎样才能使这个静态。我正在使用 uvicorn fastapi。

Yev*_*yla 6

就我而言,FastAPI 和 uvicorn 位于 Fly.io 上的反向代理后面,必须将--proxy-headers和添加--forwarded-allow-ips \'*\'到我的 uvicorn 命令中。完整示例:

\n
uvicorn app:app --host 0.0.0.0 --port 8080 --proxy-headers --forwarded-allow-ips \'66.241.124.179\'\n
Run Code Online (Sandbox Code Playgroud)\n

要查找 IP 地址:

\n
\xe2\x9e\x9c fly ips list      \nVERSION IP                  TYPE            REGION  CREATED AT           \nv6      2a09:8280:1::1:de8b public          global  2023-02-11T11:24:14Z    \nv4      66.241.124.179      public (shared)     \n
Run Code Online (Sandbox Code Playgroud)\n

它是如何运作的?

\n
    \n
  1. Uvicorn 开始处理传入的请求。
  2. \n
  3. 如果--proxy-headers启用,uvicorn 会进一步传递代理标头:\n X-Forwarded-Proto, X-Forwarded-For, ...
  4. \n
  5. 然后 uvicorn 尝试检测ProxyHeadersMiddleware中间件中的架构
  6. \n
  7. 在该中间件中,uvicorn 从标头中解析客户端 IP 地址X-Forwarded-For
  8. \n
  9. 然后将该 IP 地址与可信列表进行比较 ( --forwarded-allow-ips)
  10. \n
  11. 如果地址可信,则从中提取架构X-Forwarded-Proto
  12. \n
\n