apache 限制请求体大小的核心指令是limitrequestbody,它以字节为单位对整个http请求体(含文件、表单、边界等)做硬限制,超出即返回413错误;需与php的upload_max_filesize和post_max_size协同设置,三者取最小值生效。

Apache 中基于请求体大小的访问拦截,核心就是用 LimitRequestBody 指令。它不区分文件类型或内容格式,而是对整个 HTTP 请求体(含 multipart 数据、JSON、XML、表单字段及边界信息)做字节级硬限制,超出即返回 413 错误,请求根本不会进入 PHP 或后端逻辑。
明确限制目标:设对“整个请求体”,不是单个文件
很多人误以为这是“上传文件大小限制”,其实它管的是整个 POST/PUT 请求的原始字节总量。比如一个带 2MB 文件 + 5KB 表单字段 + 多重 boundary 的 multipart 请求,总大小可能比文件本身大 5–10%。配置时需预留这部分开销。
- 单位始终是字节(不是 MB、KB)
- 值设为 0 表示不限制(不推荐,存在 DoS 风险)
- 典型安全值:5MB →
LimitRequestBody 5242880 - 若业务需传大 XML 或 JSON,建议上限不超过 20MB,避免内存压力
配置位置与生效范围
该指令可放在全局、虚拟主机或目录块中,越靠下优先级越高:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 全局设置(影响所有站点):加在
/etc/apache2/apache2.conf(Debian/Ubuntu)或/etc/httpd/conf/httpd.conf(RHEL/CentOS)末尾 - 单站点控制:写在
<virtualhost></virtualhost>块内 - 精细到路径:嵌入
<directory></directory>中,只对该目录生效
必须协同 PHP 的两个关键参数
Apache 的 LimitRequestBody 是第一道关卡,但 PHP 层还有两道限制,三者取最小值才真正生效:
-
upload_max_filesize(php.ini):单个上传文件上限 -
post_max_size(php.ini):整个 POST 请求体上限(必须 ≥ upload_max_filesize) -
LimitRequestBody(Apache):必须 ≥ post_max_size,否则 Apache 先拦住,PHP 根本收不到
例如:你想支持最大 10MB 文件上传,建议统一设为 12MB(预留 2MB 边界和字段空间),并确保三处数值一致或 Apache 最大。
验证与排错要点
上传失败时不能只查一处:
- 看 Apache 错误日志(
/var/log/apache2/error.log或/var/log/httpd/error_log)是否有413 Request Entity Too Large - 在 PHP 脚本里打印
$_FILES['xxx']['error']:值为UPLOAD_ERR_INI_SIZE说明被 PHP 限制,UPLOAD_ERR_FORM_SIZE通常对应post_max_size不足 - 如果用了 Nginx 做反代,还需检查
client_max_body_size,否则请求会在抵达 Apache 前就被 Nginx 拦截










