有白名单的图片代理

2015年7月25日 分类: 杂谈 (192 个脚步)

好久没有发表文章了~~

最近因为有点需求,并且不忍心看到博客的评论图片将站点的绿锁头变成黄色叹号,从而想起这个办法将图片自己反代一遍。

原理也很简单,是将以前针对单个域名的地方,修改为针对全部。不过因为网站的图片没有使用相对应的后缀,所以没法使用以前的方法去限制。
不过还好,大多数网站都有相对应的 CDN,基本都是图片。所以没有多大关系,只要限制相对应的域名就可以了 

接下来为正题:

如果你首页需要显示一些文字的话,可以使用 location =/  这个来重定向到某个页面显示。

location =/ {
	rewrite  (.*) /404.html;
}

如果你需要防止别人用你的链接,可以这么加一句

valid_referers none blocked *.shiniv.com ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
	return 403;
}

接下来需要定位连接。先用正则表达式粗略判断以下是否为特定域名后缀。然后再判断域名是否在白名单中。

最后贴出内容

proxy_cache_path   /var/tmp/imgproxy  levels=1:2 keys_zone=imgproxy:100m max_size=5g;

server {
	listen          80;
	listen          443 ssl spdy;
	server_name     img.shiniv.com;
	root            /htdocs/shiniv.com/img.shiniv.com;
	error_page      403 /403.html;
	error_page      404 /images/404.jpg;

	ssl                       on;
	ssl_session_cache         shared:SSL:10m;
	ssl_session_timeout       24h;
	ssl_session_tickets       off;
	ssl_buffer_size           1400;

	ssl_protocols             TLSv1.2;
	ssl_ciphers               "AES256+EECDH:AES256+EDH:!aNULL";
	ssl_prefer_server_ciphers On;

	ssl_certificate           /path/to/certificate/server.crt;
	ssl_certificate_key       /path/to/certificate/server.key;
	
	location =/ {
		rewrite  (.*) /404.html;
	}

	location ~* "/(.+)\.(com|cn|org|com)/" {
		valid_referers none blocked *.shiniv.com ~\.google\. ~\.baidu\.;
	    if ($invalid_referer) {
	        return 403;
	    }

		set $hostx "";
		set $addrs "";
		
		if ( $uri ~ "^/+([^/]+)/(.+)$" ) {
			set $hostx $1;
			set $addrs $2;
		}

		if ($hostx !~ "shiniv.com|sinajs.cn|sinaimg.cn|duoshuo.com|gravatar.com|ds.cdncache.org|v2ex.com|qlogo.cn|xnimg.cn|head.xiaonei.com|himg.bdimg.com|douban.com" ) {
			return 403;
		}
		
		expires max;
		add_header Pragma public;
		add_header Cache-Control "public, must-revalidate, proxy-revalidate";
		
		proxy_cache imgproxy;
		proxy_cache_valid 200 302 1h;
		proxy_cache_valid 404 1m;

		proxy_redirect off;
		proxy_pass http://$hostx/$addrs;
		proxy_set_header referer "http://$hostx";
		proxy_set_header Accept-Encoding '';
		access_log off;
	}
}

有白名单的图片代理 【声明】本文 有白名单的图片代理 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2015/07/images-proxy-with-white-list/ , 转载请保留本声明!

标签: , , ,
1条评论
你必须要启用 Javascript