Apache配合uWSGI实现高性能Python托管的核心是用mod_proxy_uwsgi直连uWSGI原生协议,跳过HTTP解析开销;需同时启用mod_proxy和mod_proxy_uwsgi模块、禁用ProxyRequests、uWSGI监听TCP socket(如127.0.0.1:8001)、Apache配置ProxyPass使用uwsgi://前缀及ProxySet连接池参数,并排除静态路径由Apache直接服务。

Apache 配合 uWSGI 实现高性能 Python 托管,核心是用 mod_proxy_uwsgi 直连 uWSGI 原生协议,跳过 HTTP 解析开销,复用 Apache 的 SSL、权限和静态文件能力。不推荐 mod_wsgi 嵌入式或纯 HTTP 反代,前者耦合重,后者多一层序列化。
启用必要模块并禁用正向代理
Apache 必须同时加载两个模块才能识别 uwsgi:// 协议:
-
mod_proxy(代理基础) -
mod_proxy_uwsgi(专用于 uWSGI 协议)
在 Ubuntu/Debian 上执行:a2enmod proxy proxy_uwsgi && systemctl reload apache2
在 RHEL/CentOS 上检查 /etc/httpd/conf.modules.d/00-proxy.conf 是否含:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
全局或虚拟主机内必须加:ProxyRequests Off
否则代理规则不生效,还可能引发安全风险。
uWSGI 启动配置:只监听 uwsgi 协议 TCP 端口
mod_proxy_uwsgi 不支持 Unix socket 权限调试,也不兼容 HTTP 模式。必须用 TCP 方式暴露原生 uwsgi 协议:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
立即学习“Python免费学习笔记(深入)”;
- 启动命令示例:
uwsgi --socket 127.0.0.1:8001 --module myapp.wsgi:application --master --processes 4 --threads 2 --vacuum --die-on-term - 推荐使用配置文件(如
/etc/uwsgi/myapp.ini):
chdir = /var/www/myapp
module = myapp.wsgi:application
socket = 127.0.0.1:8001
master = true
processes = 4
threads = 2
vacuum = true
die-on-term = true
⚠️ 切勿出现 --http、http-socket 或 protocol = http —— 一旦混用,Apache 会误走 HTTP 代理路径而失败。
Apache 虚拟主机中配置 ProxyPass 和连接池
在 <VirtualHost> 内写转发规则,并用 <Proxy> 块精细控制连接行为:
- 基础转发(必须用
uwsgi://前缀):ProxyPass / uwsgi://127.0.0.1:8001/ProxyPassReverse / uwsgi://127.0.0.1:8001/ - 连接池调优(加在
<Proxy "uwsgi://127.0.0.1:8001">块内):ProxySet min=2 max=50 acquire=3000 retry=60
其中max=50是每个 Apache 子进程最多维持的连接数;retry=60表示后端宕机后 60 秒内不再转发请求。
静态资源(如 /static、/media)建议排除,由 Apache 直接服务,避免穿透到 uWSGI。
验证与常见问题排查
配置完成后务必验证:
- 运行
apache2ctl -M | grep uwsgi(或httpd -M | grep uwsgi),确认输出含proxy_uwsgi_module (shared) - 用
curl -v http://yoursite/查看响应头是否含Connection: keep-alive - 检查 uWSGI 日志和 Apache
error.log,典型错误包括:
“Invalid command 'ProxyPass'” → 模块未启用;
“failed to connect to 127.0.0.1:8001” → uWSGI 未运行或端口不匹配;
返回空白页但无报错 → 可能混用了--http导致协议不匹配。


















