nginx 实现valid_referer全面解析

先来补充点知识,然后在进行讲解。

先看下两种HTTP head 一个是直接输入网址打开的head,另一个是通过搜索引擎打开的网址head

一:直接输入网址打开的

(Request-Line)  GET / HTTP/1.1 
Host    hcoberlinol.com 
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0 
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 

二:通过搜索引擎打开的

(Request-Line)  GET / HTTP/1.1 
Host    hcoberlinol.com 
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0 
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 
Referer http://www.Google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&site=&source=hp&q=site%3Ahcoberlinol.com&btnK=Google+%E6%90%9C%E7%B4%A2 
Connection  keep-alive 
If-Modified-Since   Tue, 22 Jan 2013 07:18:31 GMT 
Cache-Control   max-age=0 

可以看出两者的主要区别在于referer,

了解了背景知识后我们来解决问题

现公司要求实现通过搜索引擎打开这个网址的化进行跳转到别的网址

直接输入网址打开的就打开这个网址

valid_referers 指令详解

该指令后面可以接 none blocked serevr_names string或者是正则表达式

none 代表没有referer

blocked 代表有referer但是被防火墙或者是代理给去除了

string或者正在表达式 用来匹配referer

nginx会通过查看referer字段和valid_referers后面的referer列表进行匹配,如果匹配到了就invalid_referer字段值为0 否则设置该值为1

现我为公司写出了实现这一功能的代码

valid_referers none blocked server_names; 
if ($invalid_referer) { 
 rewrite ^/ http://********.com/ redirect; 
} 

这里我讲解下

1.首先当我输入我要打开的网址的时候,因为是直接输入的没有referer所以匹配了

valid_referers后面的none或者是blocked 所以invalid_referer值为0 所以不进行跳转.

当我是从这个网站里面的链接跳到该网站首页的时候 因为referer的值是肯定包含srever_names 所以匹配了server_names所以不进行跳转.

 

2.当我从搜素引擎进去的时候因为referer字段类似于www.google.com.hk/search

开始进行匹配 发现没有一个匹配,则此时会设置invalid_referer值为1 if语句成功执行,进行了跳转. 达到功能

 

以上理解 仅为个人理解不知道对于否,有什么不对的地方 多多指教。我虚心接受


原文地址:http://www.07net01.com/linux/nginx_shixianvalid_refererquanmianjiexi_69766_1361327914.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值