最准确做法是将LimitRequestBody直接写入<VirtualHost>块内,限制该站点所有POST/PUT请求体大小,需比PHP upload_max_filesize和post_max_size略高100KB以覆盖multipart开销,配置后须重载服务并用curl模拟真实multipart请求验证。

直接在对应虚拟主机的 <VirtualHost> 块内添加 LimitRequestBody 指令,是最准确、最推荐的做法。它只对该站点生效,不干扰其他虚拟主机,且 Apache 在请求解析初期就拦截超限内容,不进 PHP、不占资源。
必须写在 <VirtualHost> 块内部
不能放 .htaccess(除非明确启用 AllowOverride Limit)、不能放全局主配置顶部、也不能嵌套在 <Location> 或 <Directory> 里——只有写在 <VirtualHost *:80> 或 <VirtualHost *:443> 标签内部,才真正绑定到这个域名或端口。
例如,编辑 /etc/apache2/sites-available/example.com.conf,在 DocumentRoot 下方或 <Directory> 外添加一行:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/public_html
LimitRequestBody 10485760
# 其他配置...
</VirtualHost>数值设定要略高于 PHP 的限制
Apache 的 LimitRequestBody 控制的是整个 HTTP 请求体字节数,包括文件内容 + 表单字段 + multipart boundary + 换行符等。如果 PHP 设了 upload_max_filesize = 8M 和 post_max_size = 8M,建议设为 8493056(即 8MB + 100KB),避免因边界开销被误拦。
别忘了同步调 PHP 配置
仅改 Apache 不够。还需确保该站点使用的 PHP 配置中:
-
upload_max_filesize(单个文件上限) -
post_max_size(整个 POST 请求上限,必须 ≥ upload_max_filesize)
两项都设为合理值,并根据运行模式重启服务(mod_php 重启 Apache;PHP-FPM 需单独重启php-fpm)。
验证是否生效
用真实 multipart 请求测试,比如:
dd if=/dev/zero of=test.bin bs=1M count=9 curl -F "file=@test.bin" -F "desc=测试" http://example.com/upload.php
预期返回 HTTP 413;若返回 PHP 错误(如 $_FILES['file']['error'] === 1),说明 Apache 没拦住,配置未生效。
不复杂但容易忽略

















