zoukankan      html  css  js  c++  java
  • nginx 实现valid_referer全面解析

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

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

    一:直接输入网址打开的

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

    二:通过搜索引擎打开的

    1. (Request-Line)  GET / HTTP/1.1
    2. Host    hcoberlinol.com
    3. User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0
    4. Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5. Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
    6. xxxxxxxxxxxxxxx gzip, deflate
    7. 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
    8. Connection  keep-alive
    9. If-Modified-Since   Tue, 22 Jan 2013 07:18:31 GMT
    10. 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

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

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

    这里我讲解下

    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语句成功执行,进行了跳转. 达到功能

  • 相关阅读:
    《高校后勤管理信息系统设计与实现》论文笔记五
    《高校后勤管理系统的设计与实现》论文笔记三
    《高校后勤管理系统的设计与实现》论文笔记二
    如何利用React.js开发出强大Web应用
    关于啤酒和尿布故事的真相
    以生活例子说明单线程与多线程
    未来哪些领域WiFi将成为刚需?
    CSS开发中的10个不要
    10年后编程还有意义吗?
    JavaEE中遗漏的10个最重要的安全控制
  • 原文地址:https://www.cnblogs.com/wajika/p/6575656.html
Copyright © 2011-2022 走看看