apache 文件上传限制需协同配置 limitrequestbody(字节)、php 的 upload_max_filesize 和 post_max_size(单位 m),三者取最小值生效;若经 nginx 代理,还需设置 client_max_body_size。

Apache 本身不处理 PHP 文件上传逻辑,但会先接收整个 HTTP 请求体(含文件数据),所以必须协同配置 Apache 层、PHP 层,必要时还要兼顾代理层。真正起作用的是三者中最小的那个值。
Apache 层:用 LimitRequestBody 设请求体上限
这是第一道拦截,单位是字节,控制客户端发来的整个 POST 请求体最大尺寸(包括文件 + 表单字段 + multipart 边界)。
- 编辑主配置文件:/etc/apache2/apache2.conf(Debian/Ubuntu)或 /etc/httpd/conf/httpd.conf(RHEL/CentOS)
- 添加或修改: LimitRequestBody 52428800(即 50MB)
- 也可限定到具体目录,例如:
<directory><br> LimitRequestBody 10485760<br></directory>
- 保存后重启服务:sudo systemctl restart apache2 或 sudo service httpd restart
PHP 层:同步调 php.ini 中三项关键参数
仅改 Apache 不生效,PHP 仍会在解析阶段拒绝超限请求。三个值需逻辑匹配:
- upload_max_filesize = 50M:单个文件上限(必须带单位 M/G,小写 m 无效)
- post_max_size = 52M:整个 POST 数据上限,必须 ≥ upload_max_filesize,多留 2MB 容纳 multipart 开销
- max_input_time = 300:接收上传数据的最长时间(秒),大文件建议设为 300~600
- 附带检查:memory_limit 应大于 post_max_size(如设为 256M),file_uploads = On
- 改完后:mod_php 需重启 Apache;PHP-FPM 还需额外执行 sudo systemctl restart php-fpm
注意代理层干扰(常见漏项)
如果你实际用的是 Nginx 反向代理 Apache,Nginx 会在请求到达 Apache 前就拦截:
- 在 Nginx 的 http、server 或 location 块中添加:
client_max_body_size 50M; - 用 curl -I your-domain.com 查看响应头 Server 字段,确认真实前端是 Nginx 还是 Apache
- 否则即使 Apache 和 PHP 全部放开,也会返回 413 Request Entity Too Large
验证与调试建议
上传失败别只盯一个地方:
- 查 Apache 错误日志:/var/log/apache2/error.log 或 /var/log/httpd/error_log,看是否有 413 报错
- 在 PHP 脚本中打印 $_FILES['xxx']['error']:
值为 UPLOAD_ERR_INI_SIZE → 被 upload_max_filesize 卡住
值为 UPLOAD_ERR_FORM_SIZE → 多因 post_max_size 不足 - 临时用 phpinfo() 确认当前生效的配置值,避免改错文件或被覆盖
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











