有白名单的图片代理
好久没有发表文章了~~
最近因为有点需求,并且不忍心看到博客的评论图片将站点的绿锁头变成黄色叹号,从而想起这个办法将图片自己反代一遍。
原理也很简单,是将以前针对单个域名的地方,修改为针对全部。不过因为网站的图片没有使用相对应的后缀,所以没法使用以前的方法去限制。
不过还好,大多数网站都有相对应的 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/ , 转载请保留本声明!
写的不错,马克了