limitrequestfields 是 apache 限制请求头字段数量的核心指令,用于防范慢速攻击和内存耗尽,需配置在 httpd.conf 或 virtualhost 中,不可用于 .htaccess。

LimitRequestFields 是什么,为什么需要它
LimitRequestFields 是 Apache 的一个核心指令,用于限制 HTTP 请求头中允许的最大字段数量(即 key: value 对的个数)。它不是用来防 DDoS 的主力,但能有效缓解某些慢速攻击(如 Slowloris 变种)或恶意客户端故意发送超多 Cookie、X-Forwarded-For 等字段导致解析失败或内存耗尽的问题。
默认值通常是 100,对大多数网站够用;但如果你看到 400 Bad Request 并伴随错误日志里出现 too many request headers,就该检查这个值了。
在哪配置 LimitRequestFields:httpd.conf vs .htaccess
LimitRequestFields 是服务器级和虚拟主机级指令,不能写在 .htaccess 文件里——Apache 会直接忽略它,并可能报错 Invalid command 'LimitRequestFields', perhaps misspelled or defined by a module not included in the server configuration。
必须放在以下位置之一:
- 主配置文件(如
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf) - 虚拟主机配置块内(
<virtualhost></virtualhost>中) -
mod_http2启用时,它也适用于 HTTP/2 请求头帧
示例(推荐写在 <virtualhost></virtualhost> 内,避免全局影响):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName example.com
DocumentRoot /var/www/html
LimitRequestFields 50
</virtualhost>
常见误配与踩坑点
- 把
LimitRequestFields 和 LimitRequestFieldSize 混用:LimitRequestFieldSize 控制单个 header 值长度(单位字节),而 LimitRequestFields 控制字段总数,两者独立生效。
- 设得太小(比如
10):现代前端框架(React/Vue SSR)、CDN(Cloudflare)、反向代理(Nginx)常带一堆 X- 头,实际请求头可能轻松超过 30+ 个,设成 20 就容易触发 400。
- 忘记重启服务:修改后必须执行
sudo systemctl reload apache2(Debian/Ubuntu)或 sudo systemctl reload httpd(RHEL/CentOS),restart 不必要,reload 更安全。
- 在启用
mod_security 的环境下,部分规则会主动添加请求头,进一步占用计数,需一并观察。
如何验证配置是否生效
LimitRequestFields 和 LimitRequestFieldSize 混用:LimitRequestFieldSize 控制单个 header 值长度(单位字节),而 LimitRequestFields 控制字段总数,两者独立生效。10):现代前端框架(React/Vue SSR)、CDN(Cloudflare)、反向代理(Nginx)常带一堆 X- 头,实际请求头可能轻松超过 30+ 个,设成 20 就容易触发 400。sudo systemctl reload apache2(Debian/Ubuntu)或 sudo systemctl reload httpd(RHEL/CentOS),restart 不必要,reload 更安全。mod_security 的环境下,部分规则会主动添加请求头,进一步占用计数,需一并观察。最直接的方式是构造一个带大量 header 的请求并观察响应:
curl -H "X-Test-1: a" -H "X-Test-2: b" -H "X-Test-3: c" ... -H "X-Test-51: z" http://example.com/
如果返回 400 Bad Request,且错误日志中出现 request header exceeds LimitRequestFields,说明已生效。
也可以用 apache2ctl -t -D DUMP_RUN_CFG(或 httpd -t -D DUMP_RUN_CFG)查看当前生效的配置快照,搜索 LimitRequestFields 确认值和作用域。
真实环境中,别只盯着“能设多小”,重点是结合你实际收到的请求头数量做 baseline 测量——用 ngrep -d any 'GET|POST' port 80 或 access log 的 %{Referer}i + 自定义头字段统计,比拍脑袋设值靠谱得多。










