典型的请求是这样处理的:
request -> Nginx reverse proxy -> AWS EC2 -> Express API/FastAPI -> response
但我最大的困惑是为什么 FastAPI 绝对需要 Nginx 才能工作,但 Express API 不需要(尽管 Nodejs 和 Python 都有
http
模块,因此能够创建 Web 服务器)。为什么 FastAPI 需要 Nginx? AWS EC2 实例不能像 Nginx 一样充当 Web 服务器吗?
这篇文章说这样我们就可以隐藏网址中的端口号,但这对我来说听起来不合理。
为什么 FastAPI 需要 Web 服务器(即 Nginx)
FastAPI 不需要 Nginx。您可以在没有反向代理的情况下侦听外部端口并处理请求。甚至 FastAPI 文档也包括在“高级”部分下设置 Nginx (Ref)
这篇文章说这样我们就可以隐藏网址中的端口号,但这对我来说似乎很愚蠢。
如果您使用 sudo 运行 Express 应用程序并侦听端口
80
或 443
,您仍然可以在 url 中隐藏端口号。
AWS EC2 实例不能充当像 Nginx 这样的 Web 服务器吗?
是的,可以。
使用像 Nginx 这样的代理服务器有很多好处。代理服务器可以处理负载平衡、缓存、SSL 终止,并且可以有效地处理大量并发连接。
使用代理服务器是最佳实践。但是,这不是 FastAPI 或 Express 的要求。
是的,您可以在没有 Nginx 的情况下使用 FastAPI,但如果您想通过 HTTPS 为您的应用程序提供服务,则需要直接向 uvicorn 提供 SSL 证书。 uvicorn 通过 --ssl-keyfile 和 --ssl-certfile 选项支持 SSL。
但是,如果您的服务器是 Nginx Unit(Nginx 的动态应用服务器),那么使用 Nginx 作为反向代理几乎总是有必要的。但这种情况很少见