limitrequestfields 40需全局配置在主配置文件中,因默认100是兼容性妥协而非安全值;现代合法请求常达30–60头,攻击者发200空头即可耗尽内存;该指令不支持.htaccess,必须配于httpd.conf或apache2.conf主段,并配合limitrequestfieldsize 2048才构成完整防护。

直接在 Apache 主配置文件中设置 LimitRequestFields 40,并确保它位于全局作用域(如 httpd.conf 或 apache2.conf 的主段),才能真正防御头部数量型 DDoS 攻击。
为什么默认值100不安全
Apache 默认允许 100 个请求头,但这不是安全边界,而是兼容性妥协。现代应用常携带 Authorization、X-Request-ID、X-Forwarded-For、Sec-Fetch-*、多个 Cookie 及前端监控 SDK 注入的自定义头,合法请求轻松达到 30–60 个。攻击者只需发送 200 个空头(如 X-Foo-001: a … X-Foo-200: a),Apache 就会为每个头分配内存结构、复制字符串、维护链表,迅速耗尽工作进程内存或触发解析超时,造成 500 错误或服务挂起。
必须写在全局配置,不能放虚拟主机或 .htaccess
该指令只在服务器级或虚拟主机级生效,不支持目录级覆盖。写在 .htaccess 中会导致启动报错:Invalid command 'LimitRequestFields'。更关键的是:攻击流量往往打向默认主机或未匹配的路径,若只配在某个 <virtualhost></virtualhost> 里,其余入口仍裸奔。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 推荐位置:编辑
/etc/apache2/apache2.conf(Debian/Ubuntu)或/etc/httpd/conf/httpd.conf(RHEL/CentOS),放在<ifmodule mpm_event_module></ifmodule>外的主配置段 - 配置示例:
LimitRequestFields 40 - 配完务必执行
apache2ctl configtest或httpd -t验证语法
配合 LimitRequestFieldSize 才算完整防护
只限数量不限长度,等于留后门。攻击者可发 35 个头,其中一个是 8KB 的恶意 Cookie 或伪造 JWT,照样撑爆解析缓冲区。
- 同步设置:
LimitRequestFieldSize 2048(单位是字节,非字符) - 这个值覆盖所有头,包括
Host和User-Agent;若业务中有 IoT 设备上报超长 UA,需先抽样日志确认实际最大长度 - 避免设为 0 或过大(如 65536):Apache 内部用栈缓冲区解析头,超出会退化到堆分配,扩大攻击面
验证是否真的生效
配置不是写完就结束,必须实测确认:
- 运行
apache2ctl -t -D DUMP_RUN_CFG | grep -i limitrequest,输出应明确显示你设的数值 - 用 curl 构造越界请求:
curl -H "X-Test-1: a" -H "X-Test-2: b" ... -H "X-Test-41: z" http://localhost/,应返回400 Bad Request,而非 200 或 500 - 检查错误日志(
error.log)是否有类似request header exceeds LimitRequestFields的记录










