博客加速 – 一只橙梓一个窝 https://blog.orangii.cn 可能会长出二叉树? Sat, 25 Dec 2021 09:28:15 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.5.5 https://static.orangii.cn/avatar/logo.png 博客加速 – 一只橙梓一个窝 https://blog.orangii.cn 32 32 WordPress挂载阿里云OSS+CDN加速网页并获得256T空间 https://blog.orangii.cn/2021/wp-mount-oss-cdn/ https://blog.orangii.cn/2021/wp-mount-oss-cdn/#comments Mon, 26 Jul 2021 06:46:37 +0000 https://blog.orangii.cn/?p=74 使用前介绍

对于WordPress来说,用户上传的文件、主题都在wp-content目录下,首先会占据服务器磁盘空间,然后用户的访问可能因此受到服务器带宽的限制。不管是哪一点,这次的文章可以将OSS空间直接作为wp-content的空间,换句话说就是用户上传的文件会直接到OSS,配合CDN就可以做到分布式加速,可以说非常的nice。对于一些宽带较小的服务器来说还是可以的。

这种方法最棒的地方在于,附件上传空间变为OSS,有256T空间去上传,不再怕VPS空间小了。并且可以附带的是,还可以配合CDN进行分布式地区加速,对带宽又可以很友好了。

虽然说阿里云OSS可以挂载不同地区不同提供商的服务器,但是对于同地区的阿里云服务器,阿里云的OSS提供内网访问,也就可以省去一部分的传输费用。

因为可能WordPress更新之类的操作会用到wp-content目录,所以可能快速的文件操作会导致一些额外的费用,因此本文将以wp-content/uploads文件夹为例,完成仅对上传的文件进行操作的示例。
本文以CentOS、Nginx为例
注意事项
由于挂载的磁盘目录是通过网络进行操作的,所以由于不同服务器的网络环境不同,可能出现上传图片等附件或处理上传的文件时间变长的现象,请根据自己实际需求来考虑。并且可能因为一些WordPress插件可能对挂载目录进行多次、快速访问,造成插件后台变慢、OSS额外收费等,请及时查看相关信息并决定是否继续使用。

开始前的必要操作

  1. 请你一定要备份,因为我也不知道由于各种原因你的文件会不会丢失,如果你不备份,出现的损失就要你自己承担了(只要备份了,失败之后还是很容易恢复的)。本文所有内容不一定我自己实践过,而是有些扩展内容是根据经验写出的,所有一定要有备份以防出现问题(不管是因为我的内容还是不同版本之间的差异)。至少要对你操作的文件夹进行备份,例如本文处就要备份wp-content/uploads文件夹,执行例如下面这样的代码。
cp uploads/ uploads-bak # 备份一份
  1. 创建一个阿里云OSS容器,如果你还没有开通阿里云OSS,可以在这里开通:阿里云OSS。此处为了节省一些不必要的开支,可以不用开启类似同城备份、版本控制之类的额外消费项目(如果你需要的话,那就没事了),记得读写权限那里要选择公共读,以便CDN访问方便。如果你使用的也是阿里云的服务器,尽量选择相同地区的OSS,这样可以节省传输费用。然后留意一些下面的Endpoint
Endpoint
  1. 安装ossfs,按照官方[1]的方法,可以用以下代码来完成(CentOS)
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
sudo yum install ossfs_1.80.6_centos7.0_x86_64.rpm

4. 按照ossutil(可选,wp-content/uploads文件较多的时候可以用这种方法查看迁移进度)。安装方法和配置可以查看官方的教程:https://help.aliyun.com/document_detail/120075.html。大概步骤就是:

wget http://gosspublic.alicdn.com/ossutil/1.7.5/ossutil64 #注意下载位置
chmod 755 ossutil64
./ossutil64 config #根据官方给出的教程配置ossutil
ln -s /path/to/ossutil64 /usr/local/bin #执行后可直接使用ossutil64进行访问,而不需要进入目录。注意替换路径

挂载OSS到目录

参考官方[2]的做法,首先对ossfs进行配置:在/etc/passwd-ossfs文件中按$bucket_name:$access_key_id:$access_key_secret的样式添加内容。其中bucket_name是你创建的oss bucket的名字,access_key_id和access_key_secret为阿里云账户的access key信息,如果没有可以在https://ram.console.aliyun.com/manage/ak中生成一个。(为了安全考虑,推荐使用阿里云自己也推荐的子账户access key方法。)

echo $bucket_name:$access_key_id:$access_key_secret >> /etc/passwd-ossfs # 注意替换其中的内容
chmod 640 /etc/passwd-ossfs # 官方建议的文件权限

准备文件

接下来在挂载之前,我建议提前将文件上传至OSS。为了方便后续访问,记得将文件上传至OSS的对应目录(例如本文需要上传到OSS的/wp-content/uploads文件夹),如果没有的话记得提前建立(可以使用ossutil的mkdir命令,也可以直接在OSS网页端的文件管理新建目录)。

上传方式有两种:非ossutil式ossutil式,非ossutil式由于不显示传输进度,建议仅在文件较少较小的情况下使用,否则建议用ossutil。

非ossutil方法

mkdir /tmp/uploads # 建立临时目录
systemctl stop nginx # 停止网页服务器,防止由于网页运行增加新的页面
cd /path/to/wp-content/uploads # 导向uploads文件夹
mv * /tmp/uploads

暂时先将文件移动到/tmp/uploads,等挂载完毕后移动回去就算上传了。

开始挂载

接下来我们开始挂载,目前uploads文件夹应该已经是空的了。首先为了保证目录的所属人正确,记得使用id命令查看一下你的nginx的用户的uid和gid:

[root@localhost]# id www
uid=1001(www) gid=1001(www) groups=1001(www)

然后执行挂载:

ossfs $bucket_name:/wp-content/uploads /path/to/wp-content/uploads -ourl=oss-cn-beijing-internal.aliyuncs.com -ouid=1001 -ogid=1001 -oumask=007 -o allow_other

其中的bucket_name是你的OSS容器名字;记得更换其中本地uploads文件夹的路径$bucket_name:/wp-content/uploads是指把容器内的/wp-content/uploads文件夹挂载过来;-ourl的参数上面所说的Endpoint的链接,同地区阿里云服务器使用带internal的内网访问可避免公网传输费;-ouid、-ogid参数是刚刚id命令查出的用户的uid和gid,可以保证用户所属正确;剩下的参数是目录权限,具体可以参考官方文档[3]

挂载完成后,如果你使用了宝塔面板,可以看到在文件管理或者首页看到一个256T的挂载磁盘

挂载点

并且可以在文件管理处直接管理OSS文件,其中的修改也会同步到OSS。也就是说以后上传的图片都会在这里并同步到OSS。

刚刚没有使用ossutil的朋友注意

你现在需要将刚刚临时存储的文件移动到OSS挂载的目录,来达到上传文件的目的:

cd /tmp/uploads # 转至刚刚的临时目录
mv * /path/to/wp-content/uploads/ # 移动所有文件到刚刚挂载的目录

这个过程没有任何提示信息显示,所以要等待它自己完成。具体时间要看服务器带宽、文件数量和大小决定。

最后我们把刚刚停止的Nginx启动回来

systemctl start nginx

设置开机自启动

对于CentOS来说,直接在/etc/rc.d/rc.local中添加刚刚执行挂载的命令就可以了,这个文件会在开机自动执行,然后挂载OSS。可以使用下面的方法,也可以直接vim /etc/rc.d/rc.local来用编辑器添加

# 记得替换内容,引号为刚刚执行的挂载命令
echo "ossfs $bucket_name:/wp-content/uploads /path/to/wp-content/uploads -ourl=oss-cn-beijing-internal.aliyuncs.com -ouid=1001 -ogid=1001 -oumask=007 -o allow_other" >> /etc/rc.d/rc.local

目前为止我们就已经完成了挂载OSS的全部操作。

开启CDN加速

配置阿里云CDN

首先要开通阿里云CDN,已开通的话可以跳过。没开通的自行开通即可。

回到我们刚刚的OSS管理页面,在左侧传输管理->域名管理中添加要使用的CDN域名

添加要使用的CDN域名

添加后,点击域名对应的阿里云CDN加速下面的未配置,即可跳转到CDN配置界面。

CDN配置

填写域名和相关信息后,选择适合自己的CDN配置,然后再新增原站信息中选择OSS域名,在下拉菜单中选择之前创建的OSS域名(一般是容器名+endpoint)。

如果需要验证域名,就根据提示去验证。添加完成后去DNS服务商那里添加对应的CNAME解析记录(CloudFlare记得选DNS only)

添加完成后可以看到下面的样子

开启HTTPS

一般来说为了安全也要开启HTTPS,不然浏览器也显示不安全,阿里云CDN也支持免费的SSL证书。

点击上图的配置按钮,点击新页面左侧的HTTPS配置,点击HTTPS证书右侧的编辑配置然后选择开启HTTPS安全加速,选择免费域名并勾选下面的复选框(或者选择自己上传证书也可以)

添加HTTPS证书

完成之后阿里云会自动申请证书并添加和续费。HTTPS开启成功后就可以在下面编辑一些HTTP/2、TLS版本、HSTS之类的信息了,按照自己需求完成就可以。

添加URL跳转规则

目前我们只是把上传的内容放到了OSS,并没有通过CDN去访问,现在我们需要将内容跳转到我们的CDN上去。

在WordPress站点的伪静态(Nginx中网站的conf文件)配置中添加如下规则:

rewrite ^/wp-content/uploads $scheme://blog-assets.nya.pink/$uri redirect;
# 记得修改其中的CDN域名

现在内容就会自动跳转到我们的CDN域名了。

注意
需要注意的是,这种方法还是会请求一次服务器,但是因为不加载图片本身而是返回302/301,也可以做到很多的加速效果。最好的方法还是找一个插件,在博客生成文章的适合就替换掉图片链接,可以直接减少对服务器的请求,再次加速。(目前应该很多CDN插件中应该也有这样的功能)
注意x2
如果确定要用这个方案,可以把伪静态中的redirect换成permanent即可使用301永久跳转,可以在使用一段时间后再切换

对图片进行压缩、水印处理

如果需要对图片进行压缩或者水印,可以直接在OSS处开启图片处理。

首先进入OSS管理页面,点击左侧的数据处理->图片处理,点击添加样式,根据页面提示完成对图片质量、水印等的设置(以样式compressed举例)

设置图片样式

然后再点击访问设置按钮,选择自定义分隔符(以!举例)

重新设置刚刚的伪静态为

rewrite ^/wp-content/uploads $scheme://blog-assets.nya.pink/$uri!compressed redirect;
# 在刚刚的基础上添加了!compressed

即可将所有的访问跳转到对应样式的图片上。

这种方法可以对每个上传的图片都加上水印,或者进行压缩减小传输体积。因为没有完全测试过所以大家看情况使用。

不想用了,怎么恢复

  1. 删除伪静态跳转(并清理浏览器缓存)
  2. 使用unmount /path/to/wp-content/uploads卸载挂载的OSS磁盘,并删除其开机自启项
  3. 使用ossutil或者其他方式将OSS的文件恢复至uploads文件夹(可以在卸载磁盘前先复制下来,然后卸载后重新移动至uploads文件夹)
  4. 根据需求删除ossfs、ossutil、OSS容器及其CDN服务

如果是过程中出现错误了想要恢复,请卸载挂载的OSS并将备份文件恢复,删除伪静态(如果有),即可完成恢复。

]]>
https://blog.orangii.cn/2021/wp-mount-oss-cdn/feed/ 8