二、Nginx常用模块-IP黑白名单

简介

设置IP黑白名单之前,我们先要了解下用到的模块。
http_access_module ngx_http_geo_module ngx_http_map_module

IP访问控制模块 http_access_module

Nginx的deny和allow指令是由 模块提供,Nginx安装默认内置了该模块。 除非在安装时有指定 --without-http_access_module。
用来对特定IP的进行访问控制
默认是允许所有IP访问,若部分允许需要定义deny all

  • allow
    语法: allow address | CIDR | unix: | all;
    默认值: —
    区块: http, server, location, limit_except
    允许某个ip或者一个ip段访问
  • deny
    语法: deny address | CIDR | unix: | all;
    默认值: —
    区块: http, server, location, limit_except
  • allow、deny实例
location / {
	deny 192.168.1.1;
	allow 192.168.1.0/24;
	allow 47.98.147.49;
	deny all;
}

比如可以限制某些目录下的某些文件的访问, 具体可以自己组合

  • 禁止访问所有目录下的 sql|log|txt|jar|sh|py 后缀的文件
location ~.*\.(sql|log|txt|jar|war|sh|py|php) {
	deny all;
}

ngx_http_geo_module

ngx_http_geo_module 模块创建变量,并根据客户端IP地址对变量赋值。
语法: geo [$address] $variable { … }
默认值: —
上下文: http

geo $geo {
    default        0;
    127.0.0.1/32   2;
    192.168.1.0/24 1;
    10.1.0.0/16    1;
}

定义从指定的变量获取客户端的IP地址。
默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得(0.7.27版),比如:

geo $arg_remote_addr $geo {
    ...;
}

ngx_http_map_module

文档:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_map_module.html

模块 ngx_http_map_module 可以创建一些和另外变量相关联的变量。
语法: map string $variable { … }
默认值: —
上下文: http

如果源变量值没有匹配到任何变量,则设置一个默认值作为结果。 当没有设置 default,将会用一个空的字符串作为默认的结果。
如果源值匹配了多余一个的指定变量,例如掩码和正则同时匹配,那么将会按照下面的顺序进行优先选择:
1.没有掩码的字符串
2.最长的带前缀的字符串,例如: “.example.com”
3.最长的带后缀的字符串,例如:“mail.

4.按顺序第一个先匹配的正则表达式 (在配置文件中体现的顺序)
5.默认值

这里使用一个参数:
名称:
a r g P A R A M E T E R H T T P 描 述 : 请 求 中 某 个 参 数 的 值 , 如 / i n d e x . p h p ? s i t e = w w w . b a i d u . c o m , 可 以 用 arg_PARAMETER HTTP 描述: 请求中某个参数的值, 如/index.php?site=www.baidu.com, 可以用 argPARAMETERHTTP/index.php?site=www.baidu.comarg_site取得www.baidu.com这个值.
这里我们使用参数name来给geo赋值IP(必须是IP),然后再让$name根据geo的值返回不同的信息
我们和geo结合使用实例:

http模块内
geo $arg_name $geo {
        default 0;
        127.0.0.1 1;
        1.2.3.4 2;
        1.2.3.5 3;
    }

    map $geo $name{
        0 default;
        1 forbin;
        2 allow;
        3 other;
    }
server模块内:
location = /test1 {
       default_type text/html ;
       return 200  $name;
}

访问web返回

http://localhost/test1 =>default
http://localhost/test1?name=1.2.3.5 =>other

IP黑白名单

我们就可以使用这三个模块来进行IP黑白名单的设置。
这里我们只分析白名单:
我们希望只被我们允许的网段能访问我们,其他都不可以访问。其中geo默认是从$remote_addr中获取IP,这里我们为了方便测试,改成从url的参数name中获取IP。
这里只用到geo和return

#http模块内:
#0是返回空字符串,1是返回远程地址(允许访问)
geo $arg_name $geo {
    default 0;
    1.2.3.0/24 1;
}
map $geo $name{
        0 "";
        1 $remote_addr;
    }
  #server模块内:
location = /test1 {
        if ( $geo != 1 ) {
          return 403;
        }
        default_type text/html ;
        return 200  $name;
}    

访问WEB

http:/localhost/test1?name=1.2.3.4=>返回客户端地址
http:/localhost/test1?name=1.2.4.4=>返回403
http:/localhost/test1=>返回403
总结

ngx_http_core_module
ngx_http_access_module 访问控制模块
ngx_http_gzip_module
ngx_http_fastcgi_module
ngx_http_proxy_module
ngx_http_upstream_module
ngx_http_rewrite_module
ngx_http_limit_conn_module 限制用户并发连接数以及请求数模块
ngx_http_limit_req_module 根据定义的key限制nginx请求过程的速率
ngx_http_log_module
ngx_http_auth_basic_module web认证模块
ngx_http_ssl_module
ngx_http_stub_status_module 记录nginx基本访问状态信息等的模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InterestingFigure

迈克 Let's Go

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值