上文说了刚入手了阿里云2H2G3M小鸡,就立马把博客和另一个只有框架的站搬了过来。但搬过来后发现CPU经常飙红,且内存经常处于60%左右,这让我很不踏实,因为网站随时会403。水管小只能想办法节流,于是从服务器的缓存和wordpress的优化着手。折腾了两天,速度上终于有了点进步,服务器运行也较稳定,所以把这两天的经验和心得记录下,方便自己也方便博友。
为了提高性能最大可能的缓存和静态化,但着导致了一个明显的不良后果,那就是评论可能失败,且失败时可能导致CPU高负载。关于这个问题的原因还没有找到,后面再慢慢琢磨。如果网站不需要评论功能的话,那目前的方案应该比较完美。
服务器
1、环境nginx1.24+php8.1+MySQL5.7;
2、MySQ开缓存;
3、php装memcached,并且开启opcache缓存;
opcache缓存于memcached
4、很多wordpress的502错误都和php-fpm及nginx.conf配置有关,性能允许的情况下尽量设置的大一些;
上面两个设置中timeout我都设置成了300S
5、安装nginx防火墙或其他防火墙;
wordpress
1、对wordpress文件进行权限设置;
- 根目录.htaccess、nginx.conf、wp-config.php三个文件设置444
- 其他根目录文件644
- 其他文件夹全部755,里面的文件644
2、选择一个靠谱的模板,并关掉模板中所有特效功能;
3、去掉了百度统计,引入统计要加载他们的JS,白浪费客户端流量;
4、安装W3 Total Cache静态缓存插件;
插件设置比较繁琐,最关键的是对页面进行缓存,且所有的缓存都存于memcached。目前对页面的缓存设置为1小时,更新、评论后自动刷新。页面缓存后无法用自带的评论系统,所以需要用ajax评论。
W3 Total Cache能够设置不同类型文件的缓存头,但太复杂了没有耐心研究,对钻研能力强的人来说这个插件有很强的可玩性。
CDN
1、设置静态文件缓存,关闭动态缓存,不熟悉的情况下动态缓存问题比较多;
2、/wp-admin/文件夹不缓存、html文件缓存10分钟,其他类型缓存时长随意;
3、页面优化中中的html、css、js优化都没有开,开了有错误,无法排除;
4、过滤参数(和上面的html缓存是加速的关键);
原来没有注意,很多静态资源后面都带了参数,每次加载参数都变化,所以不能缓存,设置过滤参数后缓存命中率大大提高。但需注意看日志,如果开启参数过滤后网站运行错误太多就要关闭,否则服务器可能崩溃。
以上设置完之后缓存效果很明显,但同时也舍弃了wordpress动态程序的优势,鱼与熊掌不可兼得。买不起较强的服务器,且想要保证加载速度只能牺牲动态功能了。
配置过程中踩的坑
1、开启CDN参数过滤后原本带参数的资源会出现错误,因为页面路径中的参数和CDN返回的不同,这样会导致网站报错,数量太大时会让CPU飘红。最后的方案是图片所在目录二级域名过滤参数,其他资源不过滤。
2、关闭TLSv1.1后部分资源报错,导致服务器爆内存,产生502错误,打开TLSv1.1后恢复正常。
3、开防火墙后,设置CC规则,但阿里CDN默认返回的是CDN本身IP,而不是访客的真实IP,这会导致访客访问错误全部累积到CDN IP上,从而CDN IP很快就会被封,页面显示502错误。尤其是首页,因为加载的变量较多,很容易502错误。解决方法如下:
在nginx配置文件中加入下面代码
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
4、在查找502和403错误的过程中,一度怀疑是主题和nginx版本不兼容,因此关闭了主题的很多不常用功能,后来发现不是主题的锅。但关闭后页面更轻巧了,似乎也不影响博客的写作本质,所以就真的关闭了。得出经验,尽量让博客轻巧,少用花哨的功能。
题外
腾讯云的2H4G5M轻量云三年756元似乎也不错,考虑再入一台。用了十几年wordpress,到现在越来越认为wordpress的很多问题都是服务器性能问题,如果服务器够强大,那就不用再折腾wordpress。如果法律允许在家里架设服务器,如果家庭带宽能够公网访问,那wordpress似乎会更好玩。
20 条评论