FastAPI 应通过 Uvicorn 独立运行并由 Apache 反向代理,而非用 mod_wsgi 直接托管;因 FastAPI 是 ASGI 异步框架,mod_wsgi 仅支持 WSGI 同步协议,强行封装会丢失异步能力、阻塞线程且不支持 WebSocket,官方已不推荐。

Apache 本身不直接运行 FastAPI,因为 FastAPI 是基于 ASGI 的异步框架,而 Apache 原生只支持 WSGI(同步)接口。要让 FastAPI 在 Apache 下稳定运行,必须借助 mod_wsgi 的“伪 WSGI 封装”方式(即用同步网关桥接异步应用),或更推荐的方案:**用 Uvicorn 作为主服务,Apache 仅作反向代理**——这才是生产环境的标准做法。
为什么不用 mod_wsgi 直接跑 FastAPI?
FastAPI 不是 WSGI 应用,不能像 Flask/Django 那样直接被 mod_wsgi 加载。强行用 wsgi.py 包一层(例如通过 asgiref.WsgiToAsgi)会丢失异步能力、引发线程阻塞、无法处理 WebSocket,且官方明确不推荐。2026 年主流部署实践已淘汰该路径。
正确配置:Apache 反向代理 + Uvicorn 独立进程
这是当前最可靠、性能好、易维护的方式。Apache 负责 HTTPS 终止、静态文件、负载均衡和安全防护;Uvicorn 专注高效运行 FastAPI。
- 确保系统已安装:
apache2、libapache2-mod-proxy-html、ssl-cert(如需 HTTPS) - 启用必要模块:
a2enmod proxy proxy_http proxy_ssl rewrite headers - 在项目目录中创建虚拟环境并安装依赖:
python3 -m venv .venvsource .venv/bin/activatepip install fastapi uvicorn[standard] - 编写启动脚本(如
start_api.sh),用systemd或supervisord管理 Uvicorn 进程:uvicorn main:app --host 127.0.0.1 --port 8001 --workers 4 --reload(开发用)uvicorn main:app --host 127.0.0.1 --port 8001 --workers 4 --loop uvloop --http httptools(生产推荐)
Apache 反向代理配置示例
编辑站点配置(如 /etc/apache2/sites-available/myapi.conf):
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
立即学习“Python免费学习笔记(深入)”;
<VirtualHost *:80>
ServerName api.example.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
<Location "/">
Require all granted
</Location>
</VirtualHost>
若启用 HTTPS,额外添加:SSLProxyEngine On 和重写规则将 HTTP 自动跳转至 HTTPS。
关键细节提醒
- Uvicorn 必须监听
127.0.0.1(非0.0.0.0),避免外部直连,由 Apache 全权代理 - 虚拟环境路径无需暴露给 Apache;Uvicorn 进程在激活环境后启动,所有依赖自动生效
- 确保
main.py中的app = FastAPI(...)实例可被导入,无顶层阻塞代码(如未加if __name__ == "__main__":的裸执行) - 日志分离:Uvicorn 日志写入文件,Apache 日志保留访问与错误记录,便于排查

















