在处理与 ip 地址相关的 nginx 逻辑上, ngx_http_geo_module 往往能发挥一些有力的作用; 其封装了大量与 ip 地址相关的匹配逻辑, 使得处理问题更加便捷高效;
ngx_http_geo_module 最主要的事情是作了一个 ip 地址到其他变量的映射; 一说到映射, 我们便会想起另一个模块: ngx_http_map_module; 从抽象上讲, geo 模块确实像是 map 模块在 ip (geography) 细分领域内的针对性功能实现;
geo 模块的安装
ngx_http_geo_module 编译默认安装, 无需额外操作;
geo 模块的配置
geo 模块的配置只能在 nginx.conf 中的 http 指令下, 这与 ngx_http_map_module 模块是一致的:
1 | static ngx_command_t ngx_http_geo_commands[] = { |
geo 模块的配置模式如下:
1 | geo [$address] $variable { |
其中, $address 可选, 默认从 $remote_addr
变量中获取目标 client ip address; 如果使用其他变量作为 ip 地址, 该变量须要是一个合法的 ip 地址, 否则将以 “255.255.255.255” 作为代替;
以下是一个典型的 geo 模块配置, $address 已缺省默认为 $remote_addr
:
1 | geo $flag { |
除了以上的典型用法之外, geo 模块还有一种地址段范围的匹配模式:
1 | geo $flag { |