在phpEnv集成的Apache服务中,默认的请求头大小限制可能无法满足部分接口调用需求,同时未做限制的请求也容易被恶意利用发起攻击,我们可以通过调整Apache配置来同时解决这两个问题。

一、修改Apache请求头限制
Apache的请求头限制由LimitRequestFieldSize和LimitRequestLine两个核心参数控制,前者限制单个请求头的大小,后者限制请求行的总长度,默认数值通常较小,需要手动调整。
1. 定位phpEnv的Apache配置文件
首先打开phpEnv面板,找到当前使用的Apache版本目录,通常路径为phpEnv安装目录apacheconfhttpd.conf,如果使用了虚拟主机,也可以单独在虚拟主机配置文件httpd-vhosts.conf中修改,优先级更高。
2. 添加请求头限制参数
打开配置文件后,在全局配置区域或者对应的虚拟主机<VirtualHost>标签内添加以下配置:
# 限制单个请求头最大为16KB,默认是8KB LimitRequestFieldSize 16384 # 限制请求行最大为8KB,默认是8KB,可根据需求调整 LimitRequestLine 8192
修改完成后保存文件,在phpEnv面板中重启Apache服务,配置即可生效。如果后续出现请求头超限的400错误,可以适当调大这两个参数的数值。
二、通过Apache配置防止请求攻击
除了调整请求头限制,我们还可以通过Apache的模块和规则配置,过滤恶意请求,降低攻击风险。
1. 限制请求方法
正常业务通常只需要GET、POST方法,我们可以通过mod_rewrite模块限制其他危险请求方法:
# 开启重写引擎
RewriteEngine On
# 拒绝除了GET、POST之外的请求方法
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC]
RewriteRule .* - [F,L]
配置后,使用PUT、DELETE等方法的请求会直接返回403禁止访问的响应。
2. 过滤恶意请求头
恶意请求通常会携带异常的用户代理或者自定义请求头,我们可以通过mod_setenvif模块过滤这类请求:
# 过滤包含恶意关键词的用户代理请求 SetEnvIf User-Agent "sqlmap|nikto|masscan" bad_request # 过滤包含特定恶意请求头的请求 SetEnvIf ^X-Custom-Header$ ".*恶意特征.*" bad_request # 拒绝标记为bad_request的请求 Deny from env=bad_request
3. 限制请求频率
如果需要限制单IP的请求频率,可以启用mod_reqtimeout模块,在配置文件中添加以下参数:
# 请求头接收超时配置,前10秒每秒至少接收500字节,之后每秒至少100字节 RequestReadTimeout header=10-20,MinRate=500 # 请求体接收超时配置,前20秒每秒至少接收1000字节,之后每秒至少200字节 RequestReadTimeout body=20-40,MinRate=1000
该配置可以有效防范慢速攻击,避免恶意请求长时间占用服务器连接资源。
三、配置验证
修改完所有配置后,重启Apache服务,我们可以通过以下方式验证配置是否生效:
- 发送一个携带超大请求头的请求,检查是否返回对应的错误码,确认请求头限制生效
- 使用非GET/POST方法发送请求,检查是否返回403,确认请求方法限制生效
- 使用包含恶意特征的请求头发送请求,检查是否被拒绝,确认恶意请求过滤生效
如果配置未生效,可以检查Apache的错误日志phpEnv安装目录apachelogserror.log,查看是否有配置语法错误,修正后重新重启服务即可。