我们如何在不重定向的情况下 运行 在两个端口(一个 HTTP 和一个 HTTPS)上运行一个 fastAPI 应用程序?

How can we run a fastAPI application on two ports one HTTP and one HTTPS without redirecting?

我想使用 gunicorn 托管我的 fastAPI 应用程序并将其托管在 Kubernetes 服务上。我的 Kubernetes 服务在指定端点上使用 HTTP 调用运行活动探测(健康检查)。

我还希望在 HTTPS 上提供应用程序,因为我的 Kubernetes 服务公开它以供外部组件使用。

现在我的 HTTP 端点不能依赖重定向,因为活性探测器需要 200 Response,而重定向会妨碍它。

我想在预先指定的端口上托管我的 HTTPS 端点,因为该组织已经制定了最佳实践并且指定了端点和端口。

Whosebug 上的一些类似问题:

但是这两个都可以重定向,而我们不行。我们也不能使用 NGINX 服务器,因为我的组织已弃用该支持。

如果我们在 Docker 环境中进行尝试。以下将完成它:

Docker文件:

ENTRYPOINT ./start.sh

Shell 脚本 start.sh:

gunicorn -k uvicorn.workers.UvicornWorker -w 3 -b 0.0.0.0:30000 -t 360 --reload app:app & gunicorn -k uvicorn.workers.UvicornWorker -w 3 --certfile certfile.txt --keyfile keyfile.txt --ca-certs ca_certs.txt -b 0.0.0.0:8443 -t 360 --reload app:app 

& 在后台运行一个,然后运行另一个。您可以配置一个使用 HTTP,一个使用 HTTPS。

我们将 gunicorn 用于 fastAPI 应用程序,因此我们使用 uvicorn 工作人员,您需要根据您的用例进行相应更改。

登陆这里寻求fastapi/uvicorn帮助的人:

uvicorn api:app\
 --ssl-certfile=yourcert.pem\
 --ssl-keyfile=yourkey.pem\
 --host 0.0.0.0 --port 443 --workers 1\
  &\
 uvicorn api:app\
 --host 0.0.0.0 --port 80 --workers 1

您应该知道,后台守护程序将无法在 CTRL+C 关闭。最好使用 tmux 之类的东西,并且 运行 中的 :80:443 在不同的 windows.