前言
wordpress
的头像默认使用的gravatar
服务, 但是其地址source.gravatar.com
在国内完全无法访问.
所以想着自己搭建一个镜像, 可以查看下方的搭建过程
搭建
看网上很多教程, 说的都是通过某某云服务商的cdn
服务来进行代理, 但是我试了很久也没有成功. 原因很简单, 域名被国内屏蔽了, cdn
也是在国内访问访问的, 所以拉不到数据也正常.
也就是说, 归根结底是屏蔽的原因, 如果能够绕过屏蔽, 那么就可以成功了. 百思不得其解. 直到有一天, 我在阿里云的oss
后台看到了这个:
这不就是我想要的功能么? 我的思路是这样的:
- 将
oss
放到香港 - 通过
oss
代理secure.gravatar.com
- 通过
cdn
代理oss
进行加速
按照这个思路, 访问secure.gravatar.com
的地址在香港, 想必是可以访问到的. 说干就干. 以下平台基于阿里云.
创建Bucket
注意, 地域要选择在香港.
配置镜像回源
注意, 携带请求参数要选中.
测试回源配置
访问一个默认头像:
https://hujingnb-gravatar.oss-cn-hongkong.aliyuncs.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&d=mm&f=y&r=g
请将其中的Bucket
名称更换为你自己的. 成功访问后, 你会在文件管理中看到刚刚请求的文件已经保存了.
到这一步, 说明oss
配置已经 OK 了.
如果你不需要配置 cdn
, 那么, 到这一步其实已经可以使用了. 不过香港服务器在内地访问速度上还是不太理想, 建议配一下cdn
加速访问
配置cdn
添加cdn
域名. 链接: https://cdn.console.aliyun.com/domain/list
注意, 需要使用备案过的域名才可以. 然后选择源站信息, 这里代理我们刚刚创建的oss
即可.
创建域名解析
这里提示需要进行域名解析. 到域名服务商配置一下就行. 域名配置要等一会
直到上图的状态
和CNAME
都 OK 了. 就可以进行下一步了.
启用 HTTPS
点击cdn
域名的管理, 配置 HTTPS. 使用服务商提供的免费证书即可.
OK. 到这一步, 就已经可以通过cdn
来访问Gravatar
的头像. 为了防止之前的链接缓存问题, 来个不一样的头像试一下: 记得将其中的域名改成你自己的.
https://*.hujingnb.com/avatar/6d42d2d850afb2b15f51156f37c16f41?s=64&d=identicon&f=y&r=g
如果访问成功, 说明你已经成功了. 再次回到oss
文件管理, 发现刚刚访问的文件已经下载了.
到这里, 你的gravatar
代理已经可以投入使用了.
配置头像过期
这里需要配置两个过期, 如果文件一直不过期, 那么用户头像更新之后也拿不到最新的头像.
1.配置 cdn 过期
cdn
会将访问的文件缓存在各地节点, 所以需要配置一下过期时间.
2.配置 oss 过期
即使cdn
文件过期了, 如果oss
中文件还在, 会直接从oss
中获取, 仍然拿不到最新的头像.
在oss
中, 可以配置文件的生命周期, 指定时间之后, 自动将文件删除.
比如, 可以配置一天后自动将文件删除.
结束
如果你到了这里, 应该已经配好了吧. 愉快的使用自己的镜像吧. 对了, 你可以将oss
的访问权限改为私有, 然后在cdn
授权一下私有Bucket
的可读权限即可.
问题
最后, 说一下这样配置的问题. 因为文件存储到了oss
, 而oss
又是根据文件名进行缓存的. 当一个文件已经存在了, 就不会再次回源访问了, 所以, 你会发现以下几个头像是相同的.
https://secure.gravatar.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&d=mm&f=y&r=g
https://secure.gravatar.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&d=retro&f=y&r=r
https://secure.gravatar.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&d=wavatar&f=y&r=r
https://secure.gravatar.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&d=identicon&f=y&r=r
https://secure.gravatar.com/avatar/9b59d04405217fb93755abf434aa9c1e?s=64&f=y&r=r
当然了, 如果是自己使用, 访问头像的参数都是固定的, 自然是没有问题. 但如果要作为公共镜像的话, 不同用户访问通过不同参数访问到了同一个头像, 就不太好了.
以上, 此方法稳定且费用极低, 但是建议仅个人使用, 不建议用作公共头像.
当然, 如果不考虑费用的话, 可以买一个阿里云香港的轻量服务器, 每月24元, 就可以通过nginx
来进行反向代理, 不存在文件缓存的问题.