什么是 Gravatar

Gravatar 是 Globally Recognized Avatar 的缩写,是 gravatar推出的一项服务,意为“全球通用头像”。如果在Gravatar的服务器上放置了你自己的头像,那么在任何支持 Gravatar 的 blog 或者留言本上留言时,只要提供你与这个头像关联的 email 地址,就能够显示出你的 Gravatar 头像来。

Gravatar 使用

因为网络环境原因,Gravatar 官方提供的服务在国内访问时体验较差,时常存在无法访问的情况,所以推荐使用国内的镜像服务。

下面列出国内一些常用的 Gravatar 镜像源:

  • V2EX:https://cdn.v2ex.com/gravatar/
  • 极客族:https://sdn.geekzu.org/avatar/
  • loli:https://gravatar.loli.net/avatar/
  • 中科大:https://gravatar.lug.ustc.edu.cn

将下面代码添加到主题 functions.php 文件的末尾保存即可。以极客族的为例:

// 替换 WordPress Gravatar 为 v2ex 头像源
function theme_get_avatar( $avatar ) {
    $avatar = preg_replace("/\/\/(www|\d|secure|cn).gravatar.com\/avatar\//", "//sdn.geekzu.org/gravatar/", $avatar);
    return $avatar;
}
add_filter('get_avatar', 'theme_get_avatar');

反代Nginx配置

如果你感觉上面的都慢,或者想用自己的域名的话,方法如下:

创建缓存目录:

mkdir -p /tmp/cache/
mkdir /tmp/cache/temp
chmod 755 -R /tmp/cache

创建虚拟主机配置文件

把下面代码保存到gravatar.moeelf.com文件中,放到虚拟主机目录。nginx安装方式不一样,放的位置不一样。一般位于 /etc/nginx/conf.d/ 或 /usr/local/nginx/conf/vhost/ 下面。

proxy_cache_path /tmp/cache levels=1:2 keys_zone=gravatar:50m inactive=30m max_size=50m;
server {
    listen 80;
    listen 443 ssl http2;
    server_name gravatar.moeelf.com;

    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_buffer_size 1400;

    ssl_certificate /etc/nginx/ssl/moeelf.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/moeelf.com/gravatar.moeelf.com.key;

    location / {
        proxy_pass https://secure.gravatar.com/;

        proxy_redirect off;

	# 向源站传送主机头、客户端真实 IP 等特定信息。
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Accept-Encoding "";

	# 指定缓存使用的空间。
        proxy_cache gravatar;
        # 指定缓存使用的 key 值,方便定位清除缓存。
        proxy_cache_key $scheme$host$request_uri;

        # 指定对 200、301 或者 302 等有效代码缓存的时间长度,特定参数 any 表示对任何响应都缓存一定时间长度。
        proxy_cache_valid 200 304 7d;
        proxy_cache_valid 301 24h;
        proxy_cache_valid 500 502 503 504 0s;
        proxy_cache_valid any 1d;
    }

}

重载nginx,service nginx reload使之生效。然后在用上面的方法更新即可。