【问题标题】:How to determine forwarded-allow-ips for uvicorn server from docker network如何从 docker 网络确定 uvicorn 服务器的 forwarded-allow-ips
【发布时间】:2021-03-18 00:25:33
【问题描述】:

我使用 Traefik 作为代理,也有 react frotend 和 fastAPI 作为后端。我的后端是公开的。问题是 unvicorn 服务器将您从非尾随斜杠重定向到带有斜杠 https://api.mydomain.com/posts -> http://api.mydomain.com/posts/ 的 url,但它不适用于 ssl。所以,我在前端遇到了关于 CORS 和混合内容的错误。基于这个主题FastAPI redirection for trailing slash returns non-ssl link 我添加了 --forwarded-allow-ips="*" 到 uvicorn 服务器,现在 ssl 重定向工作,但据我了解它不安全。我尝试添加 --forwarded-allow-ips="mydomain.com" 但它不起作用,我不知道为什么“mydomain.com”是服务器的 ip,所以然后是我的代理的 ip。我认为这是因为我的 api 从 docker 网络获取代理 IP,不知道如何解决。

【问题讨论】:

  • 哇,好久没有答案了。我有类似的情况,但是在 docker 容器中使用 nginx web 服务器,在另一个容器中使用 web 应用程序。
  • 我修复了对 traefik 容器使用静态 IP 的问题,并将其添加到 forwarded-allow-ips 中。不确定这种方法是否足够好
  • 哇,我不知道任何 traefik 项目。看起来很神奇。无论如何,我确信它可以用 NGINX 和 uvicorn 完成

标签: docker fastapi uvicorn


【解决方案1】:

如果您确定 Uvicorn/Gunicorn 服务器只能通过内部 IP 访问(与外部网络完全隔离,因此所有连接都来自受信任的代理 [ref]),那么可以使用--forwarded-allow-ips="*"

但是,我相信您最初问题的答案是检查您的 Docker 容器并获取它们的 IP。由于 traefik 正在路由/代理请求,您可能只需要获取 traefik 容器 ID 并运行检查:

~$ docker ps`

CONTAINER ID   IMAGE                           COMMAND                  CREATED         STATUS         PORTS                                                                      NAMES
ids_here   traefik:v2.3                    "/entrypoint.sh --pr…"   1 second ago     Up 1 second     0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   traefik


~$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ids_here
 172.18.0.1

尝试将该 IP 列入白名单。

根据我的阅读,不可能将--forwarded-allow-ips="x" 内的子网列入白名单。如果您的服务器重新启动,您的容器的内部 IP 可能(可能)会更改。对此的 hack-ish 修复将是使用 depends_on 强制容器启动顺序。 depends_on 容器将首先启动并具有较低/第一个 IP 分配。

但是,在 Docker 中可以像这样 [ref]:

labels:
  - "traefik.http.middlewares.testIPwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7"
  - "traefik.http.middlewares.testIPwhitelist.ipwhitelist.ipstrategy.depth=2"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多