nginx模块 ngx_http_geo_module

2018-07-17 11:21:27

ngx_http_geo_module 该模块可以根据客户端地址生成变量。

Syntax:	geo [$address] $variable { ... }
Default: —
Context: http
geo $geo {
    default        0;

    127.0.0.1      2;
    192.168.1.0/24 1;
    10.1.0.0/16    3;
}

上面配置的意思是将 $remote_addr 变量里面的客户端ip地址进行匹配,然后将匹配到的ip对应的值返回存入 $geo 变量,可能的值为 0-3。

也可以指定不从 $remote_addr 取地址,自己指定变量。比如从参数请求行参数 remote_addr里获取。如果ip地址不合法,将会使用 255.255.255.255。

geo $arg_remote_addr $geo {
    ...;
}

下面还有一些额外指令:

delete  删除特定的网络。

default  设置默认,如果不指定默认,也匹配不到,返回空字符串。

include  包含外部文件。

proxy  设置信任的ip地址,如果客户端的ip地址在该信任地址内。则会取请求头里 X-Forwarded-For 指定的地址来进行匹配求值。

ranges  代表ip地址以范围来指定。

geo $geo{
    default 0;
    11.11.11.11 1;
    192.168.1.3 2;
    proxy 192.168.1.0/24;  #信任地址
    proxy 127.0.0.1;  #信任地址
}

假设服务器地址为 192.168.1.10,客户端地址为 192.168.1.3;

假设我们在客户端有如下请求。

curl 192.168.1.10 -H "X-Forwarded-For: 11.11.11.11"

此时,由于客户端地址 192.168.1.3 为信任地址,所以会取 X-Forwarded-For 指定的 11.11.11.11 来当做判断的ip,它对应为1,所以最终 $geo 变量为1。

如果我们不指定 X-Forwarded-For。

curl 192.168.1.10

此时我们会把自身的客户端ip 192.168.1.3 作为判断的ip,对应的值为2,那么 $geo 变量会设置为2。


读者可以配置访问日志格式来打印出 $geo。

log_format main '$remote_addr -$geo-';
access_log logs/access.log main;


 备注

1.测试环境centos7 64位,nginx版本为 1.14.0。
2.读者也可以参考官方文档 nginx documentation
3..原文地址http://www.freecls.com/a/2712/b9


©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。