Tengine 中 ngx_http_accesskey 在反向代理中 如何和HTTP_PROXY配合使用

场景:有一tengine的反向代理,主要反向代理到几个后端服务器上,后端服务器提供数千万的图片文件,众所周知的原因,图片是很容易被盗链的,而使用refer来反盗链的话,一是可以伪造refer,另一个是 众多合作网站需要来调用图片,需要手动添加refer,因此决定使用nginx_accesskey模块来实现。

1 tengine中新增nginx_accesskey模块。

不得不说tengine的DSO功能真的很爽,如果一个线上的服务器需要新增个模块进来的话,为了减少重编译nginx,采用Tengine来操作 可以将模块直接编译成.so动态加载给nginx。

 wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
 tar -zxvf Nginx-accesskey-2.0.3.tar.gz 
 cd nginx-accesskey-2.0.3/
 vim config
修改$HTTP_ACCESSKEY_MODULE为ngx_http_accesskey_module
 cd /usr/local/cloud/nginx/tengine2.0.0/sbin
 ./dso_tool --add-module=/home/skybug/nginx-accesskey-2.0.3 --dst=/usr/local/vipcloud/nginx/dso/

至此,将ngx_http_accesskey_module.so编译并复制到了 tengine的dso目录下。

修改nginx.conf

添加 lodad ngx_http_accesskey_module.so;

ngx_http_accesskey变动态加载到tengine中。

2 如何使用ngx_http_accesskey 实现防盗链

在server段的某一个location中添加如下:

比如

location ~*\.(gif)$
        {
        root /var/www/image.xxx.com;
       access_log off;
        expires 7d;
        accesskey             on;
        accesskey_hashmethod  md5;
        accesskey_arg         "key";
        accesskey_signature   "dasiyebushuo$remote_addr";
}

这个时候  如果你访问

http://image.xxx.com/mmm/nnn/test.gif

会看到 报出403错误 没有权限访问。

如何正常来访问这个图片呢?

如果某一个客户的ip地址是 192.168.0.1

那么 dasiyebushuo192.168.0.1的md5为b49eeb993eaf25edfeca43bdaf07c541

正常访问这个图片的方法是

http://image.xxx.com/mmm/nnn/test.gif?key=b49eeb993eaf25edfeca43bdaf07c541

页面里调用图片的方法 只需要把dasiyebushuo$remoteip 计算一下md5然后作为key的参数来访问即可,

说明:

accesskey             on;   是否启用accesskey 防盗链

accesskey_hashmethod  md5;  采用md5来hash参数,可以选hash或md5

accesskey_arg         "key";参数名,如果你设置为site 那么就是xxx.gif?site= 如果设置为key 就是xxx.gif?key=

accesskey_signature   "dasiyebushuo$remote_addr"; 具体用什么来hash 可以是客户IP 可以是cookie nginx的内置变量均可,通常采用remote_addr,也可以用cookie来hash;dasiyebushuo  扰乱用的,如果你用客户iphash  别人也可以吧客户的iphash出来提交就渠道图片了,如果你在客户的ip前面加一个串一起来hash 除非别人猜出来用的什么

3 在http_proxy 反向代理中如何使用ngx_http_accesskey_module

nginx的三方模块很多,但是想让这些模块都一起来配合工作就不一定了。比如如果你的nginx是一个反向代理的图片前端服务器,采用nginx-accesskey 后比如配置为

location ~*\.(gif)$

{

expires 7d;

accesskey             on;

accesskey_hashmethod  md5;

accesskey_arg         "site";

accesskey_signature   "dasiyebushuo$remote_addr";

proxy_cache_valid 200 304 5d;

proxy_cache_valid 301 302 30m;

proxy_cache_valid any 30m;

proxy_cache_key $host$uri$is_args$args;

proxy_set_header Host pic1.xxxx.com;

proxy_set_header X-forwarded-For $remote_addr;

proxy_pass http://pic.xxxx.com_server_pool;

}

我们以为这样就可以了,结果发现 在访问图片的时候,无论你加不加?site=b49eeb993eaf25edfeca43bdaf07c541 图片都出的来,  accesskey 完全没有起作用。非常郁闷。

nginx有个神奇的功能 404重定向,ok 思路换一下,先让我们到本地去找文件(由于是反向代理,实际上任何访问的图片都不在nginx上 而是在后端服务器上,那么只有1种情况,就是访问会返回404,利用accesskey模块先来验证用户的请求对不对,如果没有加?site==b49eeb993eaf25edfeca43bdaf07c541或者 ?site=md5(dasiyebushuo$remote_addr)传入的不对,恩 是盗链 则直接返回403!如果是对了呢?对了就去/var/www/给你找这个文件,当然了,找不到赛,因此是个404,我们把404直接定向到@fallback这一段去处理。

然后在@fallback这段里 我们直接proxy_pass到后端去。修改后的配置如下:

location ~*\.(gif)$
        {
        root /var/www/;
        expires 7d;
        accesskey             on;
        accesskey_hashmethod  md5;
        accesskey_arg         "site";
        accesskey_signature   "dasiyebushuo$remote_addr";
        error_page 404 = @fallback;
}
location @fallback {
        proxy_cache_valid 200 304 5d;
        proxy_cache_valid 301 302 30m;
        proxy_cache_valid any 30m;
        proxy_cache_key $host$uri$is_args$args;
        proxy_set_header Host pic1.xxxx.com;
        proxy_set_header X-forwarded-For $remote_addr;
        proxy_pass http://pic.xxxx.com_server_pool;
}

测试后发现这样可行

时间: 04-09

Tengine 中 ngx_http_accesskey 在反向代理中 如何和HTTP_PROXY配合使用的相关文章

wdlinux中apache配置反向代理模块

想要在.htaccess中开启反向代理功能都不行[apache中没有mod_proxy模块] .htaccess 文件内容如下 RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://sogou.weixin.com/$1 [P] "proxy|P"(强制为代理) 此标记使替换成分被内部地强制作为代理请求发送,并立即中断重写处理,然后把处理移交给mod_proxy模块.你必须确保此替换串是一个能够被mod_proxy处理的有效U

正向代理、反向代理的详细解析

在此注明,本文转载于:http://z00w00.blog.51cto.com/515114/1031287 一.正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正向代理(forward)是一个位于客户端[用户A]和原始服务器(origin server)[服务器B]之间的服务器[代理服务器Z],为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获

图解正向代理、反向代理、透明代理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://z00w00.blog.51cto.com/515114/1031287 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代理.本文就是针对这三种代理来讲解一些基本原理和具体的适用范围,便于大家更深入理

图解正向代理、反向代理、透明代理(转)

转自:http://www.cnblogs.com/Anker/p/6056540.html 正向代理:代理服务器代替客户端想服务器发送请求 反向代理:客户直接访问反向代理服务器,反向代理服务器通过反向代理获取服务器内容,然后返回给客户端 透明代理:修改包,中转,透明 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代

利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理

Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一篇关于利用Nginx进行负载均衡的文章(http://www.cnblogs.com/liping13599168/archive/2011/04/15/2017369.html). 本篇文章介绍怎样通过Nginx进行反向代理,并运行asp.net网站,测试环境我使用的是Win7系统. 首先,需要下

[随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)

探究背景简介: 大学校内站点一般不对外开放,个人认为原因有二: 一是站点内容受众就是大学师生: 二是站点基本无防御措施,在公网环境下容易发生意外情况. 至于为何不对外开放,不是这篇随笔探讨的重点,利用一些技术工具,实现公网下访问校内站点,才是这篇随笔要谈的. 为何要在校外去访问校内资源?这每个人都有自己的答案. 要通过公网访问这种内部站点,基本思路有两个,一个就是找一台在校园内部能连接到公网的机器做代理:另一个就是利用几乎所有高校都会提供的VPN通道,通常用学号等作为验证. 第一种思路需要有一定

正向代理,反向代理和透明代理的区别

一.正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正向代理(forward)是一个位于客户端[用户A]和原始服务器(origin server)[服务器B]之间的服务器[代理服务器Z],为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端.客户端必须要进行一些特别的设置才能使用正向代理.如下图1.1 (图1.1) 从上面的概念

apache反向代理负载均衡请求至tomcat

实验环境 RHEL6.6-X86-64 软件 jdk-8u45-linux-x64.rpm apache-tomcat-8.0.23.tar.gz http-2.4.10 主机一:IP1: 192.168.1.10    IP2: 192.168.46.130  安装apache 主机二:192.168.46.128  TomcatA 主机三:192.168.46.129  TomcatB 拓扑图: 进入主机192.168.1.128 步骤一:安装JDK # rpm –ivh jdk-8u45-

Tomcat高级部分-使用特定模块和软件反向代理请求到后端tomcat实现负载均衡和session保持

实验目标: 1.反向代理服务器将用户请求负载均衡到后端tomcat节点: 2.配置基于nginx的负载均衡,实现会话绑定: 3.配置基于mod_jk的负载均衡,实现会话绑定: 4.基于mod_proxy实现负载均衡,实现会话绑定: 网络架构图: 网络主机规划表: 实验步骤: 前提配置: 1.tom1和tom2节点时间必须同步: 建议使用ntp协议进行: 参考博客:http://sohudrgon.blog.51cto.com/3088108/1598314 2.节点之间必须要通过主机名互相通信:

Nginx实现MogileFS的反向代理

MogileFS简介: MogileFS是一个开源的分布式文件存储系统,MogileFS适用于存储海量小文件的工作场景,由LiveJournal旗下的Danga Interactive公司开发,该团队开发了包括 Memcached.MogileFS.Perlbal 等多个知名的开源项目. MogileFS的组成: 1.server:主要包括mogilefsd和mogstored两个应用程序.mogilefsd实现的是tracker,它通过数据库(通常是MySQL)来保存元数据信息,包括站点dom