ssl 如何在两个端口(一个HTTP和一个HTTPS)上运行fastAPI应用程序而不进行重定向?

gr8qqesn  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(178)

我想使用gunicorn托管我的fastAPI应用程序,并将其托管在Kubernetes服务上。我的Kubernetes服务使用HTTP调用在指定端点上运行活动探测(运行状况检查)。
我还希望在HTTPS上提供应用程序,因为我的Kubernetes服务将其公开以供外部组件使用。
现在我的HTTP端点不能依赖于重定向,因为活动探测器需要200 Response,而重定向会妨碍它。
我希望在预先指定的端口上托管我的HTTPS端点,因为组织已采用最佳实践,并且已指定端点和端口。
StackOverflow上的一些类似问题:

  1. Running Gunicorn on both http and https
  2. uvicorn [fastapi] python run both HTTP and HTTPS
    但是这两种服务器都可以使用重定向,而我们不能,而且我们也不能使用NGINX服务器,因为在我的组织中,这种支持已经过时了。
kqlmhetl

kqlmhetl1#

如果我们在Docker环境中尝试这个方法,下面的代码可以完成:
停靠文件:

ENTRYPOINT ./start.sh

shell 脚本www.example.comstart.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 --ssl-certfile certfile.txt --ssl-keyfile keyfile.txt --ca-certs ca_certs.txt -b 0.0.0.0:8443 -t 360 --reload app:app

&在后台运行一个,然后运行另一个,你可以配置一个使用HTTP,一个使用HTTPS。
我们将gunicorn用于fastAPI应用程序,因此我们将使用uvicorn工作线程,您需要根据您的使用情形对其进行相应更改。

jc3wubiy

jc3wubiy2#

对于登陆此处寻求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

相关问题