geo 使用手记

geo指令使用ngx_http_geo_module模块提供的。默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module。

作用:

模块可以用来创建变量,其值依赖于客户端IP地址.

使用方法:

语法: geo [$address] $variable { ... }
      默认值: —

配置段: http
      定义从指定的变量获取客户端的IP地址。

1. 默认情况:nginx从$remote_addr变量取得客户端IP地址

 geo $caddr {
     default 0;
     192.168.1.239 1;
     192.168.1.200 2;
     
     include        conf/cadd.conf;
     delete         127.0.0.0/16;
     proxy          192.168.100.0/24;
     proxy          2001:0db8::/32;
 }
 
 用参数解释:
     nginx通过CIDR或者地址段来描述地址,支持下面几个参数:
     delete:删除指定的网络
     default:如果客户端地址不能匹配任意一个定义的地址,nginx将使用此值。 如果使用CIDR,               可以用“0.0.0.0/0”代替default。
     include: 包含一个定义地址和值的文件,可以包含多个。
     proxy:定义可信地址。 如果请求来自可信地址,nginx将使用其“X-Forwarded-For”头来获得           地址。 相对于普通地址,可信地址是顺序检测的。
     proxy_recursive:开启递归查找地址。 如果关闭递归查找,在客户端地址与某个可信地址匹                       配时,nginx将使用“X-Forwarded-For”中的最后一个地址来代替原始客户                       端地址。如果开启递归查找,在客户端地址与某个可信地址匹配时,nginx                        将使用“X-Forwarded-For”中最后一个与所有可信地址都不匹配的地址来代                       替原始客户端地址。
     ranges:使用以地址段的形式定义地址,这个参数必须放在首位。为了加速装载地址库,地址应按升序定义。
     
     这里,默认把$remote_addr 与geo{} 里的内容进行匹配 , 如果匹配成功,就把$caddr 设为此匹配值(eg: 当$remote_addr 为 ‘192.168.1.239‘,此时 $caddr 为 ‘1‘),在server 里面的其它个作用域就可以使用它了。
     
     实例一 : 根据 geo得到的IP来控制访问目录。
     
     http{
         
         geo $caddr {
             default 0;
             192.168.1.239 1;
           }
         server {
            ......
            
            location /addr {
               root /webroot/default/;    #设置默认的目录
               if ( $caddr = 1 ){
                  root /webroot/1/;       #根据$addr 来指定不同的目录。
               }
            }
        
     
     }
     
     #注:基它部分略。
     
     echo "default page" > /webroot/default/addr/index.html
     echo "11111 page"  > /webroot/1/addr/index.html
     
    现在reload一下nginx 
    
    测试:
        在192.168.1.239上,执行 curl 
          得到 “11111 page”
        其它主机 ,执行 curl http://192.168.11.239:91/geo
          得到 “default page”

2 .使用指定的变量。

    http {    
    	geo $arg_boy $blkIP {
            default 0;
            127.0.0.1 local;
            85.77.32.0  net1;
            202.90.0.0  net2;
         }
        
    }

3 . 匹配原则

geo指令主要是根据IP来对变量进行赋值的。因此geo块下只能定义IP或网络段,否则会报错“nginx: [emerg] invalid network”。

实际应用,可以结合 limit_req 一起,实现简单的DDOS攻击

    http{
        geo $remote_addr $black_iplist {
           default 0;
           include black_iplist.conf;
        }
        
        limit_req_zone $DDos_IP zone=DDos_IP:10m rate=10r/m;
        limit_req zone=DDos_IP burst=1 nodelay;
    
        server {
        
           location / {
                 if ( $black_iplist = 1 )        ####   判断是否存在黑名单;
              {
                set $DDos_IP $black_iplist;   ####   针对ip进行限速;
#               return 503;               ####   针对ip直接返回503;
                       }
            }
        }
    }
时间: 2024-08-11 05:43:37

geo 使用手记的相关文章

使用GEOquery下载GEO数据--转载

最近需要下载一大批GEO上的数据,问题是我要下载的Methylation数据根本就没有sra文件,换言之不能使用Aspera之类的数据进行下载.但是后来我发现了GEOquery这个不错的R包,不知道是网络问题还是怎么,GEOquery有时候运行也不太稳定,但是总体来说,很好地解决了我的问题. 首先假设我们想要下载的数据是GSE77445,这是一批DNA甲基化数据,我们可以在R语言中安装GEOquery之后,载入R包,然后直接输入: Data <- getGEO("GSE77445"

随手记(二)

首先一个随手记app需要一个登陆注册功能,而androidstudio自带的sqllite就起到了很强大的作用. 1.用户登陆界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&quo

[转]灯灯小程序开发手记:仿今日头条(上)

本文转自:http://www.jianshu.com/p/a1e0b8abb12d 写在前面 新的一年,祝大家新年快乐!当然对于程序员来说,新的一年,也要有新的改变.因此灯灯决定凑热闹编写微信小程序啦! 上一篇文章<记一次小程序开发过程>中,灯灯大致写了下自己第一次开发小程序的感受和流程.这一次灯灯会详细记录下自己制作一个小程序的思路.遇到的问题.涉及到的代码等和大家分享.    视频教程地址:http://study.163.com/course/introduction.htm?cour

Nat.Geo.Games.DogTown.v1.0.Cracked-F4C

Macaraja.Soft.RamWizard.v3.1.2.2.Cracked-QUANTiZE\ MetaProducts.LightPad.v4.6.164.WinAll.Incl.Keygen-CRD\ MetaProducts.Portable.Offline.Browser.v5.8.3158.Incl.Keymaker.And.Patch-ROGUE\ Millionenjagd.GERMAN-ALiAS\ Mishap.An.Accidental.Haunting-OUTLAWS

Redis Geo: Redis新增位置查询功能

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.html 移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Service,LBS)起到很重要的促进作用.在移动互联网的大环境下,每个手机都变成了一个位置追踪设备,为人们提供了非常丰富的位置服务.无论是附近的人,还是摇一摇等耳熟能详的应用都需要LBS在后台的支撑.但是,目前位置信息的使用过程中存在诸多挑战如相邻计算不准确等.由于

[小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory &amp; 团队构建

本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读下来并动手实践的话,我相信你应该可以模拟日常工作中80%常见的手动测试用例了.请注意:我的用词是模拟用例,而不是书写自动化测试用例.一个企业级的自动化测试的构建不是单靠Selenium一种技术就能Hold住的.所谓模拟指的是只能实现自动化的某个Case,但是不能工程化的使用.在本人所接触过几家公司的自动化测试

[小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建

在我看来一个自动化测试平台的构建,是一种很好的了解开发语言,单元测试框架,自动化测试驱动,设计模式等等等的途径.因此,在下选择了自动化测试的这个话题来和大家分享一下本人关于软件开发和自动化测试的认识.刚刚开通了博客,就从最基础的开始吧,算是写给初学者的编程手记,也算是给对自动化完全不了解的小伙伴开个头.时间允许的话会坚持更新下去... ... 后续的文章计划会谈到一些企业级自动化测试平台的构建(但愿有时间完成哈~~). 关于自动化测试的框架,网上有很多相关的对比,在这里我我就不评论和对比了.本人

让项目管理理论&ldquo;落地&rdquo;&mdash;&mdash;读《IT项目经理成长手记》有感

最近利用业余时间阅读了一本好书--<IT项目经理成长手记>(潘东.韩秋泉著).本书的两位作者是神州数码(中国本土最大的整合IT服务提供商)的高管,在书中他们介绍了神州数码在IT项目管理领域积累的实践做法和工作思路.本书从IT项目经理面临的真实问题和场景出发,将一个项目管理实践者所亲历的案例整理成"手记",如实地记录下问题解决方法和收获的经验教训. 读完此书,结合科研项目管理的现状,进行了一些思考.在此,将思考后的感想分享. 一.量化指标,使项目状态透明化 书中提出了一个让人

大叔手记(1):使用VisualStudio的查找与替换替代默认的系统搜索(转载)

大叔手记(1):使用VisualStudio的查找与替换替代默认的系统搜索 一直以来,一直使用Visual Studio的查找与替换(Find and Replace)来搜索当前项目或整个解决方案里的代码,从来没怎么注意右边的那个选择文件夹功能. 原来还可以选择非解决方案的文件夹,而且试用了一下,速度明显比默认的系统搜索功能快,尤其是在阅读.NET4.0源码的时候,效果真是高啊. 大叔手记:旨在记录日常工作中的各种小技巧与资料(包括但不限于技术) 原文链接 本文由豆约翰博客备份专家远程一键发布