apache 通过 limitrequestbody 指令限制请求体总大小(单位字节),是唯一原生上传控制方式,需与 php 的 upload_max_filesize 和 post_max_size 协同设置,三者取最小值生效,超出即返回 413 错误。

Apache 本身不解析上传文件,只接收整个 HTTP 请求体(含文件数据、表单字段、multipart 边界),所以“客户端最大上传文件大小”必须靠 LimitRequestBody 指令来设——这是 Apache 唯一原生支持的上传大小控制方式。
1. Apache 层:用 LimitRequestBody 控制请求体总大小
该指令限制的是整个请求体字节数(不是单个文件),单位是字节,超出直接返回 413 Request Entity Too Large,请求根本不会进 PHP。
- 编辑主配置文件:/etc/apache2/apache2.conf(Ubuntu/Debian)或 /etc/httpd/conf/httpd.conf(RHEL/CentOS)
- 添加一行,例如限制为 50MB:LimitRequestBody 52428800
- 也可放在虚拟主机或目录块中,更精细控制:
<directory><br> LimitRequestBody 20971520<br></directory>
- 保存后重启服务:sudo systemctl restart apache2(或 httpd)
2. PHP 层:同步调高 upload_max_filesize 和 post_max_size
即使 Apache 放行了请求,PHP 还会二次校验。实际生效值取三者最小值:LimitRequestBody、post_max_size、upload_max_filesize。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 编辑 php.ini(路径可用 php --ini 查),修改:
- upload_max_filesize = 45M(单个文件上限,建议比 Apache 小一点)
- post_max_size = 50M(整个 POST 数据上限,必须 ≥ upload_max_filesize,留出 multipart 开销)
- 若用 mod_php:重启 Apache 即可生效
若用 PHP-FPM:还需执行 sudo systemctl restart php-fpm
3. 补充关键项:避免上传中途失败
大文件上传耗时长、占内存,光调大小不够,这些 PHP 设置常被忽略但很关键:
- max_input_time = 600(接收上传数据最长秒数,慢网环境必调)
- max_execution_time = 600(脚本总执行时间,含保存、校验等后续操作)
- memory_limit = 256M(尤其上传后要读入内存处理图片/文档时)
4. 验证与排错要点
上传失败时别猜,看现象定位问题根源:
- 返回 413 错误 → Apache 的 LimitRequestBody 触发
- 页面空白 + $_FILES 为空 + error_log 提示 “POST Content-Length exceeds…” → PHP 的 post_max_size 或 upload_max_filesize 被超
- 用 phpinfo() 确认当前生效的 ini 值,注意不同运行模式(mod_php vs PHP-FPM)加载的 php.ini 可能不同










