欢迎光临
我们一直在努力

Nginx-自建缓存服务器加速gravatar头像

前段时间写了篇关于加速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');
赞(3) 打赏
原创文章转载请注明出处:爱编程 » Nginx-自建缓存服务器加速gravatar头像
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

爱编程、一个运维兼程序员的博客!

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏