用Nginx反向代理并缓存Gravatar来解决头像被墙

6655
最近,Gravatar的默认服务器被墙了,Wordpress博客上的头像全是叉叉。网上有很多的解决方案,不过我是采用Nginx反向代理并缓存Gravatar来实现头像正常显示的。如果采取这个方法,必须有一个墙外的VPS,否则没法搞。

反向代理是什么?

反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部(或其他)网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。

缓存是什么?

把服务器A的资源缓存到服务器B,然后直接从服务器B读取数据。

具体的实现方法:

1、安装Nginx

你可以安装lnmp一键包:http://lnmp.org/

2、在域名管理上为域名gravatar.example.com添加A记录到VPS的IP上

3、修改nginx.conf配置文件的http层

找到nginx.conf所在位置:usr/local/nginx/conf/

查找#limit_conn_zone $binary_remote_addr zone=perip:10m;,并在前面加入以下内容:

client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
# 配置临时目录
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache:20m inactive=30d max_size=600m;
#20m是内存占用,30d是30天无访问删除,600m是缓存占具硬盘空间,cache为缓存区名字,

4、创建缓存目录,并赋予权限

mkdir /home/cache/path -p
mkdir /home/cache/temp
chmod 755 -R /home/cache

5、新增虚拟主机配置:

vi /usr/local/nginx/conf/vhost/gravatar.yourdomain.com.conf
#gravatar.yourdomain.com是你要绑定的域名

server
{
        listen 80;
        server_name gravatar.yourdomain.com;
        access_log /home/wwwlogs/gravatar.log access; 

        location / {
        proxy_cache cache;
        proxy_cache_valid 200 304 7d;
        #200 304状态缓存7天,按实际情况修改
        #其他状态缓存(如502 404)10秒
        proxy_cache_valid any 10s;
        proxy_cache_key "$scheme$host$request_uri";
        #缓存key规则,用于自动清除缓存。
        proxy_pass http://gravatar.com; 
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	#向后端传递访客ip
        #limit_conn one 20;
        #limit_rate 200k;
        #20为单ip连接数,200k为单ip连接速度,若要开启请去掉#
}
}

修改完后,我们先执行:/usr/local/nginx/sbin/nginx -t 检查配置是否正常,如果显示:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful 则正常,否则按错误提示修改配置,错误提示会精确到哪一行的。

最后重启nginx,请执行:/etc/init.d/nginx restart,使Nginx配置生效。

以上命令是在军哥的lnmp一键安装包的环境下执行,如果你的运行环境不是这个,请自行搜索。

6、在主题的functions文件中添加如下代码:

//反代Gravatar头像
function my_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.yourdomain.com",$avatar);
return $avatar;
}
add_filter( 'get_avatar', 'my_avatar');

请确保get_avatar函数没被占用哦,如果你的域名解析也生效了的话,头像应该能显示。

7、修改下后台的默认头像选项:

如果勾选了“神秘人”作为默认头像,那些没设置过Gravatar头像的用户留言后,会导致Wordpress无法拉取到默认头像,因此需要改成其他的选项。

 

此的方法的优点和缺点:

优点:
1.官方头像,稳定性好
2.兼容所有的主题

缺点:
1.需要有墙外的VPS

———–更新日志——

2016.04.15:优化了配置文件说明和安装步骤描述。

—————参考文章————–

本文参考了NginX 反代系列教程,特此感谢。

相关推荐

  1. 沙发
    神父 2014-11-19

    再加上缓存功能的话就更好了

    • 回复
      灵尘子 2014-11-19
      @神父 有时间再搞搞,现在不想折腾啊。
    • 回复
      灵尘子 2014-11-19
      @神父 忘记提醒你,记得修改下后台的默认头像选项。
      • 回复
        神父 2014-11-20
        @灵尘子 我昨天也看了jybb那篇文章,有点复杂的样子。 这个方法应该饭袋任何网站都可以吧,比如google
  2. 板凳
    xinsenz 2014-11-19

    你是用这种方法吗?头像还显示不了~~~

  3. 地板
    大肥羊 2014-11-19

    高大尚,哈哈

  4. 4楼
    灰狼 2014-11-28

    直接改成gravatar.duoshuo.com,简单

  5. 5楼
    电脑爱好者 2014-12-2

    方法真好 可惜主机还是在镇内…

  6. 6楼
    水景一页 2014-12-16

    Gravatar又被墙了啊!感觉介货很无辜。还没解封?

  7. 7楼
    Longlan 2015-01-13

    顶!之前用的是修改成多说的服务器,但是还是不行,最后用的你的方法!

”返回顶部”