Web服务器频繁请求/.env致CPU过高,如何快速搜索所有含/.env的内容?
全局字符串搜索优化方案
1. 优化原生grep命令(无需额外安装工具)
原有grep -inr "/.env"运行慢的核心原因是默认会无差别扫描所有文件,包括二进制文件、系统虚拟目录、超大日志/缓存文件、外部挂载目录等无搜索价值的内容,调整参数即可大幅提速:
- 跳过无关目录、过滤二进制文件的优化命令:
grep -inr --exclude-dir={proc,sys,dev,tmp,var/log,var/cache} --binary-files=without-match "/\.env" /
- 参数说明:
--exclude-dir跳过系统虚拟目录、日志、缓存目录,这类目录要么没有业务代码,要么文件体积过大无搜索意义--binary-files=without-match直接跳过二进制文件,你要找的请求逻辑肯定在文本类代码/配置文件中- 将
/.env改为/\.env是转义点号,避免匹配到/aenv这类不符合要求的无意义结果
- 如果已知业务代码统一存放在
/var/www、/home等固定目录,直接指定搜索目录代替全局扫描/,速度会再提升数倍:
grep -inr --binary-files=without-match "/\.env" /var/www /home
2. 用高性能第三方搜索工具(推荐)
如果服务器允许安装额外工具,优先使用ripgrep(简称rg),这是专门为代码搜索优化的工具,默认就会自动跳过二进制文件、隐藏目录、符合.gitignore规则的文件,搜索速度比原生grep快3~10倍:
- 主流发行版安装命令:
- Debian/Ubuntu:
apt install ripgrep - CentOS/RHEL:
dnf install ripgrep
- Debian/Ubuntu:
- 全局搜索命令:
rg -i "/\.env" /
- 指定业务目录搜索命令:
rg -i "/\.env" /var/www /home
额外排查建议
如果本地搜索不到相关代码,大概率这类请求是外部扫描触发的,你可以先查Web服务器访问日志,确认请求的来源IP、UserAgent:
- Nginx日志查询:
grep "/.env" /var/log/nginx/access.log - Apache日志查询:
grep "/.env" /var/log/httpd/access_log
如果来源都是陌生公网IP,说明是黑客批量扫描.env暴露漏洞的爬虫请求,直接在Web服务器配置中拦截该路径的请求即可解决CPU占用过高的问题。
内容的提问来源于stack exchange,提问作者Forau
相关产品推荐
相关产品推荐

