如何使用uWSGI运行FastAPI程序?求实操案例
FastAPI 改用 uWSGI 启动的协议不匹配问题解决方案
核心原因
FastAPI是ASGI框架,uWSGI默认仅支持WSGI协议,直接启动会出现协议不兼容,导致无法正确处理请求。
实操步骤
1. 安装必要依赖
先确保装齐所需包:
pip install uwsgi fastapi python-multipart
2. 编写uWSGI配置文件
新建uwsgi.ini文件,替换对应路径和参数后使用:
[uwsgi] # 端口配置:直接监听HTTP端口,或者用socket配合反向代理 http = :8000 # 项目根目录,替换成你的项目实际路径 chdir = /opt/your-fastapi-project # 入口模块:main是你的FastAPI文件名(比如main.py),app是FastAPI实例名 module = main:app # ASGI适配关键配置 http-websockets = true protocol = uwsgi # 进程和线程配置,和你之前Gunicorn的配置对齐即可 master = true processes = 2 threads = 4 # 退出时自动清理临时文件 vacuum = true # 日志文件路径(可选,方便后续排查问题) daemonize = /var/log/uwsgi-fastapi.log
3. 启动uWSGI
用配置文件启动最稳定:
uwsgi --ini uwsgi.ini
测试阶段也可以直接用命令行参数快速启动:
uwsgi --http :8000 --chdir /opt/your-fastapi-project --module main:app --http-websockets true --processes 2 --threads 4
4. 验证启动结果
检查进程是否正常监听指定端口:
ss -tulpn | grep uwsgi
正常输出会显示uWSGI进程监听你配置的端口,类似:
LISTEN 0 1024 *:8000 *:* users:(("uwsgi",pid=31144,fd=4),("uwsgi",pid=31145,fd=4))
常见排查点
- 确认
module配置正确:比如你的入口文件是app.py,实例是api = FastAPI(),就要写成module = app:api - 不要混用WSGI和ASGI参数:比如别同时用
wsgi-file和module指定ASGI应用 - 如果用Nginx反向代理,把uWSGI的
http改成socket = 127.0.0.1:8001,Nginx配置里用uwsgi_pass 127.0.0.1:8001;,同时确保Nginx安装了uwsgi模块
内容的提问来源于stack exchange,提问作者XieZhiPeng
相关产品推荐
相关产品推荐

