Apache本身不直接执行Python代码,实际部署指mod_wsgi集成Python应用或Apache反向代理uWSGI/Gunicorn;413错误多源于前置Nginx,需先用curl -I确认Server头;Apache层设LimitRequestBody 0和Timeout 600,Python层同步调整框架上传限制。

Apache 本身不直接执行 Python 代码,所以“Apache 中 Python 部署”实际指的通常是以下两种常见组合之一:mod_wsgi + Python Web 应用(如 Flask、Django),或Apache 作为反向代理,后端是 Python 应用服务器(如 Gunicorn/Uvicorn)+ Nginx/FastAPI。但注意:如果你看到 413 Request Entity Too Large 错误,那大概率是 Apache 前面还套了 Nginx——Apache 默认不会返回这个错误码。
确认真实架构再调配置
先用 curl -I https://your-site 查响应头中的 Server 字段:
- 显示
Server: nginx→ 实际是 Nginx 接收请求,Apache 在后端(或根本没用);需同步调 Nginx 和后端 Python 的限制 - 显示
Server: Apache→ 确认是 mod_wsgi 模式,此时 Apache 自身限制和 Python 层都要设
Apache 层关键配置(mod_wsgi 场景)
Apache 对上传大小和超时的控制集中在两个指令:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
-
LimitRequestBody:限制整个 HTTP 请求体大小(单位字节)。默认是 0(无限制),但很多发行版预设为 2GB 或更低。上传 5GB 文件需显式放开:
LimitRequestBody 0(或设为足够大的值,如5368709120) -
Timeout:定义请求处理最大等待秒数。大文件上传期间连接空闲时间可能很长,建议调高:
Timeout 600(10 分钟)或更高,视业务容忍度而定
这些配置需放在 <virtualhost></virtualhost> 或对应目录上下文中,并重启 Apache 生效。
Python 应用层上传限制(以 Flask/Django/FastAPI 为例)
即使 Apache 放开了,Python 框架或 WSGI 容器仍可能截断请求:
-
Flask:默认不限制,但依赖底层 Werkzeug 的
MAX_CONTENT_LENGTH。可在应用中设:
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024 * 1024 # 5GB -
Django:通过
DATA_UPLOAD_MAX_MEMORY_SIZE(内存解析上限)和FILE_UPLOAD_MAX_MEMORY_SIZE控制。大文件应确保后者足够,并配合FILE_UPLOAD_HANDLERS使用磁盘暂存 -
FastAPI:UploadFile 默认使用 SpooledTemporaryFile,小文件驻内存,大文件自动落盘,无需额外设内存上限;但需在路由中用
async def+await file.read(chunk_size)分块读取,避免await file.read()一次性加载
超时与稳定性增强建议
单纯调大超时和大小不够,还需应对网络波动和中断:
- 启用分块上传(前端切片 + 后端合并),避开单次长连接瓶颈
- 后端避免对上传文件做全量内存操作(如
file_get_contents、json.dumps(file_bytes)) - 设置合理的
upload_tmp_dir(PHP 场景)或 Python 的临时目录权限和空间,防止写入失败 - 若用 mod_wsgi,检查
WSGIApplicationGroup %{GLOBAL}和进程模型(processes/threads),避免单个上传阻塞整个进程
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










