对于WordPress来说,用户上传的文件、主题都在wp-content目录下,首先会占据服务器磁盘空间,然后用户的访问可能因此受到服务器带宽的限制。不管是哪一点,这次的文章可以将OSS空间直接作为wp-content的空间,换句话说就是用户上传的文件会直接到OSS,配合CDN就可以做到分布式加速,可以说非常的nice。对于一些宽带较小的服务器来说还是可以的。
这种方法最棒的地方在于,附件上传空间变为OSS,有256T空间去上传,不再怕VPS空间小了。并且可以附带的是,还可以配合CDN进行分布式地区加速,对带宽又可以很友好了。
虽然说阿里云OSS可以挂载不同地区不同提供商的服务器,但是对于同地区的阿里云服务器,阿里云的OSS提供内网访问,也就可以省去一部分的传输费用。
cp uploads/ uploads-bak # 备份一份
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进行访问,而不需要进入目录。注意替换路径
参考官方[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。
接下来我们开始挂载,目前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。
你现在需要将刚刚临时存储的文件移动到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,已开通的话可以跳过。没开通的自行开通即可。
回到我们刚刚的OSS管理页面,在左侧传输管理->域名管理中添加要使用的CDN域名
添加后,点击域名对应的阿里云CDN加速下面的未配置,即可跳转到CDN配置界面。
填写域名和相关信息后,选择适合自己的CDN配置,然后再新增原站信息中选择OSS域名,在下拉菜单中选择之前创建的OSS域名(一般是容器名+endpoint)。
如果需要验证域名,就根据提示去验证。添加完成后去DNS服务商那里添加对应的CNAME解析记录(CloudFlare记得选DNS only)
添加完成后可以看到下面的样子
一般来说为了安全也要开启HTTPS,不然浏览器也显示不安全,阿里云CDN也支持免费的SSL证书。
点击上图的配置按钮,点击新页面左侧的HTTPS配置,点击HTTPS证书右侧的编辑配置然后选择开启HTTPS安全加速,选择免费域名并勾选下面的复选框(或者选择自己上传证书也可以)
完成之后阿里云会自动申请证书并添加和续费。HTTPS开启成功后就可以在下面编辑一些HTTP/2、TLS版本、HSTS之类的信息了,按照自己需求完成就可以。
目前我们只是把上传的内容放到了OSS,并没有通过CDN去访问,现在我们需要将内容跳转到我们的CDN上去。
在WordPress站点的伪静态(Nginx中网站的conf文件)配置中添加如下规则:
rewrite ^/wp-content/uploads $scheme://blog-assets.nya.pink/$uri redirect;
# 记得修改其中的CDN域名
现在内容就会自动跳转到我们的CDN域名了。
redirect
换成permanent
即可使用301永久跳转,可以在使用一段时间后再切换如果需要对图片进行压缩或者水印,可以直接在OSS处开启图片处理。
首先进入OSS管理页面,点击左侧的数据处理->图片处理,点击添加样式,根据页面提示完成对图片质量、水印等的设置(以样式compressed举例)
然后再点击访问设置按钮,选择自定义分隔符(以!举例)
重新设置刚刚的伪静态为
rewrite ^/wp-content/uploads $scheme://blog-assets.nya.pink/$uri!compressed redirect;
# 在刚刚的基础上添加了!compressed
即可将所有的访问跳转到对应样式的图片上。
这种方法可以对每个上传的图片都加上水印,或者进行压缩减小传输体积。因为没有完全测试过所以大家看情况使用。
unmount /path/to/wp-content/uploads
卸载挂载的OSS磁盘,并删除其开机自启项如果是过程中出现错误了想要恢复,请卸载挂载的OSS并将备份文件恢复,删除伪静态(如果有),即可完成恢复。
]]>