前段时间写了篇关于加速gravatar头像的文章wordpress-完美解决gravatar头像加载问题的办法,介绍我们的wordpress利用v2ex的缓存服务器去加速gravatar头像的显示,原来没发现,今天发现七牛云的个人中心的头像也是调用的gravatar的头像,看了下,他也是和v2ex一样是自己建立的缓存服务器,只不过他缓存服务器的更新速度不如v2ex的快。
既然你们能自己搞缓存服务器,我为啥不能搞个自己用呢,说搞就搞,首先我们要确认我们的缓存服务器访问gravatar的图片服务器一定要快,再就是这台缓存服务器能让用户快速的访问。
正好我手里有台香港的服务器,国内访问速度不错,我试了下在服务器上面访问gravatar的图片服务器速度很好,所以就拿这台机器做我自己的头像缓存服务器,我这台机器的服务端是用的nginx,利用nginx配置缓存服务器很很简单,下面是配置代码;
server {
listen *:443 ssl http2 default_server;
server_name gravatar.qzze.com;
access_log logs/gravatar.log main;
error_log logs/gravatar_error.log;
ssl_certificate ssl/qzze.com/fullchain.cer;
ssl_certificate_key ssl/qzze.com/qzze.com.key;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA256;
charset utf-8;
location /avatar {
proxy_pass https://192.0.73.2:443;
proxy_set_header Host www.gravatar.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
proxy_http_version 1.1;
proxy_set_header Accept-Encoding "";
add_header X-Cache $upstream_cache_status;
proxy_cache cache;
#设置状态码为200 302过期时间为
proxy_cache_valid 200 302 10s;
}
}
上面的配置文件,由于我的nginx启用了http2所以第一行要这样配置,如果你没有启用http2,那把“http2 default_server”从配置文件中删除就可以,启用http2协议在传输速度上面,我自己测试能提高三分之一,主要是因为http2协议所有的数据传输是通过这一个通道完成的,http2协议需要ssl协议的支持,无论你数据放在几台机器上面,只要证书用的一个,在数据传输过程中都会只启动一个通道,nginx支持http2协议的配置方法原来写过一文章nginx-配置nginx支持最新的http2协议,大家可参考配置自己的nginx支持http2协议,另外为保证所有的域名使用一个证书,这里我是申请的Let’s Encrypt 免费的泛域名证书,申请方法见我另一文章:利用dnspod接口申请Let’s Encrypt免费的ssl证书。
配置文件中我设置了缓存10秒,经测试发现,本身头像图片大体上还设置有一分钟的缓存时间,这样搞起来你在gravatar修改头像后2分钟缓存便会更新成新的头像。
nginx更新了配置文件,一定不要忘记重新加载配置文件,我们的wordpress调用自己缓存服务器的方法也很简单,直接将以下代码放到当前主题 functions.php 的最后一个 ?> 的前面可以了。
function get_ssl_avatar($avatar){
$avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://gravatar.qzze.com/avatar/$1?s=$2" class="avatar avatar-$2" height="50px" width="50px">',$avatar);
return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');
最新评论
感谢
能不能屏蔽掉刷流量的,统计工具显示全部都是
路过学习了
好像不太行啊 加载不出来啊
好文章
是否可以 实现 判断手机端跳转 而网址不变呢
你好
感谢分享,我也遇到这个了,根据你的提示,屏蔽掉了