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

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

nginx 实现valid_referer全面解析的更多相关文章

  1. Nginx重要结构request_t解析之http请求的获取

    请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 本文主要参考为<深入理解nginx模块开发与架构解析>一书,处理用户请求部分,是一篇包含作者理解的读书笔记.欢迎指正,讨论. ...

  2. nginx源代码分析--配置文件解析

    ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...

  3. nginx文件类型错误解析漏洞

    漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行.80sec发现 其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将 ...

  4. 再提供一种解决Nginx文件类型错误解析漏洞的方法

    [文章作者:张宴 本文版本:v1.2 最后修改:2010.05.24 转载请注明原文链接:http://blog.zyan.cc/nginx_0day/] 注:2010年5月23日14:00前阅读本文 ...

  5. Nginx(六):配置解析之location解析

    nginx成为非常流行的代理服务软件,最根本的原因也许是在于其强悍性能.但还有一些必要的条件,比如功能的完整,配置的易用,能够解决各种各样的实际需求问题,这些是一个好的软件的必备特性. 那么,今天我们 ...

  6. Nginx缓存了DNS解析造成后端不通--代理

    文章转载自:https://segmentfault.com/a/1190000022365954 1 问题现象 我们使用 Nginx 的时候,经常会用到 Proxy 功能,为了方便管理,后端站点或者 ...

  7. 一、基于hadoop的nginx访问日志分析---解析日志篇

    前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...

  8. 如何更改nginx网站根目录 以及解析php

    nginx默认网站根目录为/usr/local/nginx/html,如果想要将它改成/data/www 需配置 vim /usr/local/nginx/conf/nginx.conf 将其中的字段 ...

  9. Nginx安装与配置文件解析

    导读 Nginx是一款开放源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3代理服务,是一款自由的软件,同时也是运维工程师必会的一种服务器,下面我就简单的说一下Nginx服务器的 ...

随机推荐

  1. Java-JUC(七):同步锁的几种方式

    为什么要使用同步锁? 因为当使用多线程同时访问一个变量或对象时,如果这些线程中即有读又有写操作时,会造成导致变量或对象的状态出现混乱.例如:一个银行账户被A/B两个线程同时操作,A线程.B线程同时开始 ...

  2. Magento错误 Illegal scheme supplied, only alphanumeric characters are permitted

    1.检查表core_config_data 'web/unsecure/base_url' 和'web/secure/base_url' 的值是否是正确的链接地址 2.删除系统目录var下所有子目录及 ...

  3. 35个让人惊讶的CSS3动画效果

    1. Pure CSS Coke Can 2. Colorful Clock 3. jQuery DJ Hero 4. Animated Pricing Column 5. Slick jQuery  ...

  4. CentOS7安装Docker与使用篇

    一.在CentOS7上安装Docker篇 1. 查看系统版本: $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) 2. 安装 ...

  5. ArcGIS10.6了解一下

    因为计算机水平不断更新,ESRI不得不重新倾力打造下一代ArcMap,叫ArcGIS Pro,现在ArcGIS Pro功能有一定地突显,但还不够强大和稳定:而ArcGIS Desktop方面没有什么大 ...

  6. redis 五种数据结构详解(string,list,set,zset,hash),各种问题综合

    redis 五种数据结构详解(string,list,set,zset,hash) https://www.cnblogs.com/sdgf/p/6244937.html redis 与 spring ...

  7. jQuery.cookie应用操作

    //1.插件框架: /* * name @键 * value @值 * options @选项,包括有效期 路径 域名等 */ jQuery.cookie = function(name, value ...

  8. Linux中磁盘分区、格式化、挂载等管理

    1. 添加磁盘,查看磁盘状况 [root@db1 /]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units = c ...

  9. Linux中使用GoAccess进行日志实时监控

    一.用法命令: goaccess access_log -o /var/www/html/report.html --real-time-html 说明:请先安装Httpd和Goaccess 二.效果 ...

  10. ngx_lua实现页面跳转

    好久不用ngx_lua了,忽然被问到如何实现页面跳转,半天没反应过来,查了半天资料搞出来的,在这里做一个备份. 需求说明:***.taobao.com 跳转到 www.taobao.com/?url= ...