最近在维护一台轻量云服务器时,刚好处理了关于【宝塔NGINX防火墙】的配置与优化问题。很多站长在遇到类似情况时往往容易踩坑,其实只要理清思路,按部就班排查和配置,很快就能解决。
顺手把实操步骤和目前跑得比较稳定的配置整理记录下来,方便以后查阅,也给遇到同样问题的朋友提供一个参考。
1. 临时恢复与紧急处置
如果网站当前正处于报错打不开的状态,最快的恢复方法是重启对应的服务:
- 登录宝塔面板后台,在左侧点击【软件商店】->【已安装】;
- 找到当前运行的 PHP 版本(如 PHP-7.4 或 8.0),点击右侧的【设置】;
- 在【服务】标签下点击【重启】,通常网站能瞬间恢复正常访问。
但如果只重启而不去排查原因,过几天遇到访问波动往往还会再次出现。建议继续按下面的步骤做个基础调整。
2. 关键参数设置参考(针对 1G/2G 轻量机型)
宝塔默认的一些性能预设对于配置有限的轻量云服务器来说往往偏激进。进入 PHP 设置的【性能调整】,根据服务器的实际物理内存做针对性调整:
| 物理内存规格 | 推荐并发方案 | max_children | 建议 Swap 大小 |
|---|---|---|---|
| 1核 1GB | 10-20 并发 | 10 | 1024 ~ 2048 MB |
| 1核/2核 2GB | 20-30 并发 | 20 | 2048 MB |
| 2核 4GB | 30-50 并发 | 35 | 2048 MB |
注意:修改完参数后,记得在【服务】里点击一下【重载配置】使新设置生效。
3. 查看日志确认具体原因
想要彻底搞明白为什么会报错,看日志是最直接的办法:
- 看是否被系统强杀(OOM):在终端执行
dmesg -T | grep -i oom。如果输出里有包含杀死php-fpm的记录,说明物理内存确实跑满了,需要收紧上面提到的子进程数或加 Swap。 - 看请求是否排队堆积:查看
/www/server/php/你的版本/var/log/php-fpm.log,如果看到server reached max_children setting的提示,说明并发请求把进程池塞满了。 - 看连接是否断开:查看
/www/wwwlogs/你的网站域名.error.log,确认 Nginx 和后端通信的具体超时报错。
4. 为什么改完参数后还是会被打崩?
在实际运维中,很多朋友会发现:明明自己的个人博客或小站点一天就几十个人看,怎么还会把进程池打满?
翻一翻 Nginx 的访问日志就会发现,公网里有大量自动化的黑客扫描器和恶意爬虫,在不停地高频探测 /wp-login.php、/xmlrpc.php 等接口。小内存服务器经不起这种瞬时并发折腾,很容易被扫崩。
靠人工天天看日志封 IP 很费时间。更省心的办法是在 Nginx 前置开启 WAF 防火墙(例如宝塔面板自带的 Nginx 防火墙插件),直接把异常 User-Agent 和高频恶意扫描拦截在最外层,恶意流量根本进不到 PHP 进程,能省下大量不必要的系统资源消耗。