文档章节

【Nginx探究系列二】Nginx配置篇之客户Nginx白名单访问配置

一介码夫_Hum
 一介码夫_Hum
发布于 2015/10/10 12:06
字数 697
阅读 3652
收藏 10

一、简介

      在通常情况下,使用 nginx 基于 ip 限制访问请求频率等限制内容,我们会需要对特定ip进行限制排除操作,因此本文引入了基于nginx geo 与 nginx map 进行此类情景相关配置;

      在没有人为操作删除的情况下(without-http_geo_module),nginx默认模块中已经加载了ngx-http-geo-module相关内容;

       ngx-http-geo-module可以用来创建变量,变量值依赖于客户端 ip 地址;

       ngx-http-map-module可以基于其他变量及变量值进行变量创建,其允许分类,或者映射多个变量到不同值并存储在一个变量中;

      ngx-http-map-module相关内容同样在默认nginx中已存在,除非由人为移除( --without-http_map_module

二、相关指令格式

Nginx geo 格式说明

Syntax ( 语法格式 ): geo [$address] $variable { ... }

Default ( 默认 ): -

Content ( 配置段位 ): http

 

Nginx map 格式说明

Syntax ( 语法格式 ): map String $variable { ... }

Default ( 默认 ):-

Content ( 配置段位 ): http

 

三、白名单配置示例

   

http{

    # ... 其他配置内容
    
    
    #定义白名单ip列表变量
    geo $whiteiplist { 
          default 1 ;
          #myself
           127.0.0.1/32 0;
         #remote ip 
          64.223.160.0/19 0;
     }
     
     #使用map指令映射将白名单列表中客户端请求ip为空串
     map $whiteiplist $limit{
        1 $binary_remote_addr ;
        0 "";
     }
     
     #配置请求限制内容
     limit_req_zone $limit zone=foo:1m rate=10r/m;     
}

server{
  location /yourApplicationName {
      proxy_pass http://192.168.1.111:8095/app;
      # 在 server 中进行限制配置引用 zone = foo
      limit_req zone=foo burst=5 nodelay;           
  }
}

        白名单配置可用于对合作客户,搜索引擎等请求过滤限制

#(特殊情况处理)

  #如果想仅限制指定的请求,如:只限制Post请求,则:

    http{
      
      # 其他请求..
      
      #请求地址map映射
        map $request_method $limit {
            default "";
            POST $binary_remote_addr;
          }

       #限制定义
       limit_req_zone $limit zone=reqlimit:20m rate=10r/s;
       
   }
   
   #然后在server中进行引用。
   
   server{
      ... #与普通限制一致
    }

    
    
    
    
    
 #在此基础上,想进行指定方法的白名单限制处理,则:
 
 http{
  
   #... 
   
   #定义白名单列表
   map $whiteiplist $limitips{
            1 $binary_remote_addr;
            0 "";
       }


    #基于白名单列表,定义指定方法请求限制
    map $request_method $limit {
            default "";
           # POST $binary_remote_addr;
             POST $limitips;
        }

    #对请求进行引用    
    limit_req_zone $limit zone=reqlimit:20m rate=10r/s; 
    
    #在server中进行引用
    server{
       #... 与普通限制相同
    }
    
    
    # 对应用中指定请求路径不设置限制,如对请求路径为  即api目录下的请求不做
    # 限制,则可写为 
    server{
      location /app {
         proxy_pass http://192.168.1.111:8095/app;
         limit_req zone=foo burst=5 nodelay; 
      }
      location /app/api {
          proxy_pass http://192.168.1.111:8095/app/api
      }
    }
    
    # 因nginx会优先进行精准匹配,所以以上写法即接触了对api目录下属路径的限制

  

四、参考资料

参考官方文档: 

 ngx-http-geo-module

 ngx-http-map-module

© 著作权归作者所有

一介码夫_Hum
粉丝 25
博文 122
码字总数 30761
作品 0
海淀
其他
私信 提问
DevOps实践 - 白名单二三事

为何加白名单是一件痛苦的事? 白名单的需求,即我们的部分应用,出于数据的敏感性与安全性,需要让指定的外包公司能访问,但其他外网用户不能访问的一种需求。 需求已明确,再看下我们之前的...

bean_53
2017/04/19
0
0
nginx防盗链、访问控制、解析php、代理服务

11月28日任务 12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置 12.16 Nginx代理 1.Nginx防盗链 示例一: 配置如下,可以和上面的配置结合起来 vi /usr/local/nginx/conf...

hhpuppy
2018/11/29
19
0
nginx 配置优化指南

一、nginx后台项目限制外网访问 公司合规要求,后台地址限制外网访问,所以通过匹配进行限制,但通过nginx deny allow进行设置无法生效,故通过用户真实IP进行判断,步骤如下: 1)环境介绍:...

邱月涛
2017/12/26
0
0
Nginx白名单防御模块--belial waf

这个程序是基于 nginx lua module . 运行平台是 linux freebsd 的 nginx 。。 WIN 的 你可以用个 linux 的 nginx 做反向代理 保护后面的服务。 Belial 目前包含的模块有 : GET 、 POST 、 ...

逆雪寒
2013/09/12
3.6K
3
Nginx防盗链、访问监控、解析php相关配置,Nginx代理

Nginx防盗链 因为改配置也是用location板块,所以本节可结合日志管理一起配置。 测试 不匹配白名单不能访问: [root@localhost vhost]# curl -utest:159820 -e "http://www.baidu.com/1.png"...

豆渣锅
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 面试

https://www.bilibili.com/video/av51271222?from=search&seid=4920203212236751600 https://www.bilibili.com/video/av60309372/?spm_id_from=333.788.videocard.4......

MtrS
35分钟前
6
0
理想的数据分析平台

数据分析尤其是大数据分析这几年的热度依然不减,但面对眼花缭乱的数据分析产品很难去选择,那什么是理想的数据分析平台呢。下面是根据我的个人理解的理想数据分析平台,在次强调我理想的数据...

赛克蓝德
42分钟前
7
0
房贷计算器

题目要求 贷款有两种还款的方式:等额本金法和等额本息法,简单说明一下等额本息法与等额本金法的主要区别: 等额本息法的特点是:每月的还款额相同,在月供中“本金与利息”的分配比例中,前...

wzb88
53分钟前
10
0
springboot2 配置druid数据链接池,监控控制台

Druid是什么? Druid首先是Java语言中最好的数据库连接池,也是阿里巴巴的开源项目。Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池...

万建宁
54分钟前
7
0
离线环境玩Docker-安装篇

如果你使用的是Mac之类的系统,推荐本地安装Docker,然后Docker运用运行CentOS(目标安装环境是CentOS)。如果你使用的是Windows,那么创建一个虚拟机可能是比较好的选择,Docker运行CentOS当然...

RippleChan
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部