Apache访问日志大量GET请求:是否无害及如何屏蔽该类日志?
问题解答
一、这类请求的危害性判断
从日志内容来看,这是客户端将你的服务器当作代理,发起的跨域第三方请求(请求行直接指定了外部支付接口http://chongzhi.jusunpay.com:8122/pay),返回302说明你的服务器对该请求做了跳转处理。
单次这类请求资源消耗不大,但存在潜在风险:
- 若这类请求批量发起,会持续占用服务器连接数、日志存储资源,甚至可能被利用作为恶意流量的中转跳板,给服务器带来额外负载。
- 另外,这类请求存在的前提,可能是你的服务器代理配置仍有残留漏洞(比如之前的代理配置错误未完全清理),建议再次确认服务器是否需要提供代理服务——如果不需要,这类请求完全属于无效冗余请求,应当拦截。
二、屏蔽特定请求的日志记录(Apache环境)
针对Apache,有两种常用方式实现,根据你的需求选择:
方式1:仅跳过日志记录,不拦截请求
通过SetEnvIf标记目标请求,再在日志配置中排除标记的请求:
# 精准匹配请求行中的目标URL,设置NO_LOG环境变量 SetEnvIf Request "^GET http://chongzhi.jusunpay.com:8122/pay HTTP/1.1$" NO_LOG # 修改access_log配置,排除带NO_LOG标记的请求 CustomLog /var/log/apache2/access.log combined env=!NO_LOG
如果该请求的来源IP固定(比如日志中的51.159.210.176),也可以直接匹配IP来排除:
SetEnvIf Remote_Addr "51\.159\.210\.176" NO_LOG
方式2:拦截请求同时跳过日志记录
如果这类请求完全无意义,建议直接拦截,避免浪费服务器资源,同时不记录日志:
RewriteEngine On # 匹配目标请求行,返回403并标记NO_LOG RewriteCond %{THE_REQUEST} ^GET http://chongzhi.jusunpay.com:8122/pay HTTP/1.1$ RewriteRule ^ - [R=403,L,NS,E=NO_LOG:1] # 日志配置排除NO_LOG标记的请求 CustomLog /var/log/apache2/access.log combined env=!NO_LOG
注意:修改配置后需要重启Apache服务生效,同时建议先备份原配置文件,避免出错。
内容的提问来源于stack exchange,提问作者Wellington Lopes
相关产品推荐
相关产品推荐

