阿里云虚拟主机 WordPress CPU 100%
最近遇到好几次 CPU 100%,网站无法打开 的情况了。只能通过阿里云后台重启主机来解决。重启大概要 10 分钟左右。
因为是虚拟主机,没法自己修改 php 的设置。只能暂时先把各种插件都禁用了,换了一个简洁的主题,再看看之后还会不会再出现这种情况。
2019/01/20 追记
连续 3 天了,今天又是 CPU 飙到 100%。问了阿里云的客服,回复如下:
您好,这边查看到您目前 cpu 又处于跑满的状态,根据您反馈的频繁出现这种情况 您可以登录主机控制台下载网站日志 操作可参考附件 然后您检查一下是否有异常 ip 大量地访问您的网站呢,比如说同一个 ip 或 ip 段短时间内非常频繁地刷您网站等,如果您那边检查过网站日志判断是有异常 ip 的话,您可以参考文档使用.htaccess 文件屏蔽异常 ip:https://help.aliyun.com/knowledge_detail/36294.html?spm=5176.11065259.1996646101.searchclickresult.1b5a9e24Wi7Pse
看了下最近 3 天的日志,有两次都是 360Spider 连续请求之后服务器开始 down 的,有一次没有记录到什么请求,不确定是哪边导致的。
下面是今天的日志,可以看出在 20s 左右的时间内 360Spider 请求了 60 多次,而且绝大多数都是两个月之前迁移到 WordPress 之前的地址,现在 URL 已经变掉了。
42.236.10.72 - - [20/Jan/2019:07:02:21 +0800] "GET /blog/details/c7811525-aee7-46d3-bd75-329ca330bd9c HTTP/1.1" 500 358 "http://www.liujiajia.me/blog/details/c7811525-aee7-46d3-bd75-329ca330bd9c" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider" hyu4340810001.my3w.com text/html "/usr/home/hyu4340810001/htdocs/index.php" 5929378
42.236.10.110 - - [20/Jan/2019:07:02:21 +0800] "GET /blog/details/79c6d0c8-1fc7-4872-a437-1d32f2634830 HTTP/1.1" 500 358 "http://www.liujiajia.me/blog/details/79c6d0c8-1fc7-4872-a437-1d32f2634830" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.4.2661.102 Safari/537.36; 360Spider" hyu4340810001.my3w.com text/html "/usr/home/hyu4340810001/htdocs/index.php" 6976363
42.236.10.122 - - [20/Jan/2019:07:02:21 +0800] "GET /blog/details/csharp-multi-threading-04-tpl-02-basic-task-operation HTTP/1.1" 500 358 "http://liujiajia.me/blog/details/csharp-multi-threading-04-tpl-02-basic-task-operation" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.4.2661.102 Safari/537.36; 360Spider" hyu4340810001.my3w.com text/html "/usr/home/hyu4340810001/htdocs/index.php" 7728771
......
42.236.10.91 - - [20/Jan/2019:09:34:41 +0800] "GET /?c=0&t=jenkins HTTP/1.1" 200 9652 "https://www.liujiajia.me/?c=0&t=jenkins" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.4.2661.102 Safari/537.36; 360Spider" www.liujiajia.me text/html "/usr/home/hyu4340810001/htdocs/index.php" 12172122
参考 这篇文章 修改了 .htaccess 文件,屏蔽了 360Spider。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*360Spider.* [NC]
RewriteRule .* - [F]
阿里云的虚拟主机,因只能通过 FTP 访问,但看不到 .htaccess 文件,所以无法下载下来再修改。
有两种修改方法:
- 本地新建 htaccess 文件并上传至 htdocs 目录下,将 htaccess 更名为.htaccess;
- 也可以直接创建 .htaccess 文件,上传会自动覆盖之前的 .htaccess 文件。
修改后需要在【设置】=>【固定链接】中重新设置 URL 结构,否则会导致无法访问博客详情页。
保存后的 .htaccess 文件内容如下(这里使用的 日期和名称型 结构):
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*360Spider.* [NC]
RewriteRule .* - [F]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我最终修改成了如下格式:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*360Spider.* [NC]
RewriteRule .* - [F]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
2019/08/05 追记
修改了 .htaccess 文件之后貌似并没有多少改善,还是偶尔会死机。
之后安装了 WP Super Cache 插件,机器才稳定不少。
上个月又安装了 Blackhole for Bad Bots 和 Wordfence Security 插件。
Blackhole for Bad Bots 这个插件貌似没什么效果,不确定其如何工作的。
Wordfence Security 插件倒是可以拦截很多请求,不过设置和运行都很慢。期间发现有很多请求的 IP 来自阿里云,然后我拦截了 IP 端之后发现自己无法修改任何设置了。这时就比较麻烦了,想修改设置,需要先通过 FTP 修改插件的目录名,此时就可以正常提交后台请求了。如果需要再启用 Wordfence Security 则需要安装 Wordfence Assistant 禁用相关的功能之后,再把插件目录名修改回来,然后再重新开启禁用的功能。
但是昨天又发现了虚拟主机内存居高不下的情况,而且网站也访问不了,重启之后很快内存又上来了。最后只好把 Wordfence Security 插件关闭了。
所以现在只能靠 WP Super Cache 插件撑一撑了。开启了预缓存,并设置成了永不过期。然后安装了 Autoptimize 插件以压缩加载的 JS 和 CSS 文件的数量(打开网页的速度还是有提升的)。
如果还是出现较多宕机的情况的话,准备还是改回自己写的 .NET 版站点。虽然功能弱了点,但是胜在稳定。