This post was published in 2021-08-31. Obviously, expired content is less useful to users if it has already pasted its expiration date.
将站点从Fastcomet导出:我仍然采用了最传统的方法,mysqldump和tar打包整个目录。新的服务器用Nginx取代了原来的Apache,所以有很多依赖于.htaccess文件的插件不能用了/存在明显安全隐患。
OPcache的从有到无是最能明显感受到提速的(html page cache也算一个,无论什么形式的都可以);剩下的乱折腾(memcached, redis ...)在本站部署的环境下基本都属于边缘优化。
新服务器一开始安装的是Mysql 5.7,后来把它换成了MariaDB 10.5 .
一开始我仍然用WP Cloudflare Super Page Cache作为缓存插件,但令我非常不解的是,自从搬到了新服务器,我挂在Cloudflare上缓存的html文件就一直疯狂丢失。之前托管在在Fastcomet的时候,无论采用cURL还是puppeteer,Cloudflare至少会让我的文件在12小时内有95%的存活率(见:Sometimes Cloudflare don’t cache page via CURL request),而现在只要把html文件扔上去就立马有65%以上的文件被丢弃。(通过跑preload脚本分析response headers可以计算出,或者在Cloudflare看控制台也可以看出)
我实在是分析不出原因,也厌倦了用各种伪装puppeteer和Cloudflare斗来斗去,也所以我扔掉了这个插件,开始考虑Redis page cache或者NGINX FastCGI 。效率确实不如Cloudflare来的厉害,但是缓存文件终于掌握在了自己手里,再也不需要看Cloudflare的脸色过日子了!
要注意,Redis Object cache和Redis full page cache是完全不同的:前者经常和memcached放在一起比较,后者经常和NGINX FastCGI放在一起比较。
(我没有实测过,但我相信)
方案1:把NGINX FastCGI的缓存路径挂载在/run/?或者其他tmpfs路径上;
方案2:使用一个最常规的缓存插件,比如WP Super Cache,然后把缓存的文件夹(一般是wp-content/cache)替换成ramdisk挂载的文件夹;
这两者的效率在小站点上是差不多的。当然,从理论上来说,nginx fastcgi绕开了php-fpm,应该会更快一点点。
在配置好NGINX FastCGI以后,我开始着眼于Redis Object cache或者memcached:当然事实很残酷,并不是所有网站都适合用,我的网站在安装了Redis Object cache以后并没有看到我想要看到的那种非常显著的性能提升,而且这些插件都给你的“文章保存”实时触发了一个清理动作,让我感到很不愉快。
后来我终于发现了导致问题的原因:我的防盗链代码和NGINX config冲突了。
原问题:
我的站点出现了莫名其妙的问题:部分js文件在浏览器隐私窗口里出现404报错,而在正常窗口,或者cURL里,又一切正常,比如:https://truxton2blog.com/wp-includes/js/wp-emoji-release.min.js 。直到现在我也没有解决这个问题,好在目前只有wp-emoji-release.min.js出现这种情况,它和wordpress /embed/绑定,并不会对当前页面的外观造成影响。
wordpress.org商店里的一系列lightbox插件都不是让我非常满意(包括现在的):有的明确表示不支持thumbnail,有的在移动端表现糟糕;有的甚至安装了完全不起作用;有的需要花钱买;有的仅仅对gallery才起作用。
在解决上面出现的一些莫名其妙问题的过程中,我一度使用暴力的重装软件甚至重装系统去试图解决这些问题。终于我的域名到达了Let's Encrypt的每周获取阈值(https://letsencrypt.org/docs/rate-limits/),www.truxton2blog.com要等下周才能申请到了。因强迫症作祟,我的Cloudflare SSL 一直设置为“Full (strict)”,所以我必须向Let's Encrypt一次性申请一个包含了域名和所有子域名的SSL证书,否则子域名301跳转就会被Cloudflare抛出526 ssl certificate error错误,这个时候将Cloudflare SSL 修改为“Full”就可以临时规避这个问题。
把mariaDB的连接方式设置为unix socket:
$ lsof -U | grep mysql
然后修改配置文件
// wp-config.php
define( 'DB_HOST', 'localhost:/path/to/mysql.sock' );
对速度的提升可能肉眼看不出来,但无论如何,从理论上来看这都是稳赚不赔的设置。
本笔记写到这里。后续补充内容见: