在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_geo_module模块实录
ngx_http_geo_module模块,默认情况下,nginx会加载,除非人为的 --without-http_geo_module。
这个模块提供了一个非常好用的geo指令,可以用它来创建变量,诞生其值依赖于客户端IP地址。
ngx_http_geo_module
模块官网地址
http://nginx.org/en/docs/http/ngx_http_geo_module.html
geo指令
语法: geo [$address] $variable { ... }
默认值: —
配置段: http
定义从指定的变量获取客户端的IP地址。默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得。如
geo $remote_addr $geo {default 0;127.0.0.1 1;
}
geo $arg_ttlsa_com $geo {default 0;127.0.0.1 1;
}
如果该变量的值不能代表一个合法的IP地址,那么nginx将使用地址“255.255.255.255”。
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:使用以地址段的形式定义地址,这个参数必须放在首位。为了加速装载地址库,地址应按升序定义。
geo $country {default ZZ;include conf/geo.conf;delete 127.0.0.0/16;proxy 192.168.100.0/24;proxy 2001:0db8::/32;127.0.0.0/24 US;127.0.0.1/32 RU;10.1.0.0/16 RU;192.168.1.0/24 UK;
}
vim conf/geo.conf
10.2.0.0/16 RU;
192.168.2.0/24 RU;
地址段例子:
geo $country {ranges;default ZZ;127.0.0.0-127.0.0.0 US;127.0.0.1-127.0.0.1 RU;127.0.0.1-127.0.0.255 US;10.1.0.0-10.1.255.255 RU;192.168.1.0-192.168.1.255 UK;
}
遵循最精确匹配原则,即nginx使用能最精确匹配客户端地址的值。
适用实例
上面的例子几乎都是官网说明例子。下面举例说明便于理解该指令的用法。
完整的nginx.conf如下:
https://github.com/taoyunxing/github_test/blob/master/nginx.conf
1. 使用默认变量也就是$remote_addr
http {geo $ttlsa_com {default 0;127.0.0.1 1;}server {listen 8080;server_name localhost;location /hello {default_type text/plain;echo $ttlsa_com;echo $arg_boy;}}
}
# curl 127.0.0.1:8081/hello?boy=默北
1
默北
2. 使用指定变量
http {geo $arg_boy $tao_com {default 0;127.0.0.1 1;8.8.8.8 2;}server {listen 8081;server_name localhost;location /hello2 {default_type text/plain;echo $tao_com;echo $arg_boy;}}
}
curl 127.0.0.1:8081/hello2?boy=8.8.8.8
2
8.8.8.8
3. 匹配原则
http {geo $arg_boy $tao2_com {default 0;127.0.0.1/24 24;127.0.0.1/32 32;8.8.8.8 2;}server {listen 8081;server_name localhost;location /hello3 {default_type text/plain;echo $tao2_com;echo $arg_boy;}}
}
curl 127.0.0.1:8081/hello3?boy=127.0.0.1
32
127.0.0.1
curl 127.0.0.1:8081/hello3?boy=127.0.0.12
24
127.0.0.12
4. range用法
http {include mime.types;default_type application/octet-stream;geo $arg_ip $address {ranges;default no; # note that ranges precedes all other directives.0.0.0-126.255.255.255 abroad|abroad;127.0.0.0-223.255.254.255 beijing|cmcc;}server {listen 80;server_name localhost;location /iptool {default_type text/plain;echo $address;}}
}
curl "http://127.0.0.1:8081/iptool?ip=144.144.144.144"
beijing|cmcc
geo $arg_ip $address 表示使用客户端请求的ip参数值当做ip,如http://127.0.0.1:8081/iptool?ip=144.144.144.144,意思是使用144.144.144.144当做ip过geo这个模块,查询属于127.0.0.0-223.255.254.255这个网段,因此就将这个网段对应的值beijing|cmcc赋值给$address。
注意:geo指令主要是根据IP来对变量进行赋值的。因此geo块下只能定义IP或网络段,否则会报错“nginx: [emerg] invalid network”。
5.自定义常量
geo $dollar {default "$";}server {listen 8081;server_name localhost;location /test2 {echo "This is a dollar sign: $dollar";}}
curl -v 'http://localhost:8081/test2'
参考文献
[1].http://nginx.org/en/docs/http/ngx_http_geo_module.html
[2].http://ju.outofmemory.cn/entry/96242
[3].http://www.ttlsa.com/nginx/using-nginx-geo-method/
[4].http://blog.sina.com.cn/s/blog_6d579ff40100wi7p.html
在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_geo_module模块实录相关推荐
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启echo-nginx-module模块实录
echo-nginx-module是一个第三方模块,在nginx源码中没有,但是OpenResty中有,它为nginx.conf带来了echo,sleep,time等多个类似bash的强大命令. 目前 ...
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_empty_gif_module模块实录
ngx_http_empty_gif_module是nginx自带的标准模块,它只返回一个保存在内存中的透明像素的GIF图片(速度当然比硬盘上读取的速度快很多),多用于传递统计参数,用在locatio ...
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_req_status模块实录
ngx_req_status是一个第三方模块,它用来展示nginx请求状态信息,类似于apache的status,ats的stats_over_http和channel_stats,nginx自带的模 ...
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_auth_request_module实录
ngx_http_auth_request_module是是nginx的一个验证模块,它允许您的nginx通过发送请求到后端服务器(一般是应用服务器,例如tomcat,或者php等)进行请求, 并且根 ...
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_map_module实录
介绍 默认情况下,nginx会加载标准模块ngx_http_map_module(或称ngx_map),除非人为的在configure时添加--without-http_map_module选项. n ...
- 在CentOS 6.9 x86_64的nginx 1.12.2上安装第三方模块set-misc-nginx-module实录
set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义.JSON引述.Hexadecimal/MD5/SHA1/Bas ...
- 在CentOS 6.8 x86_64的nginx 1.10.3上开启http2功能
在原有基础上修改编译选项来开启http2 回见 http://blog.csdn.net/tao_627/article/details/60957521 在nginx源码目录下的configure选 ...
- 在CentOS 6.9 x86_64上开启nginx 1.12.2的stub_status模块(ngx_http_stub_status_module)监控
Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: ./configure -- ...
- 在CentOS 6.8 x86_64上安装nginx 1.10.3
本文档记录了完全使用最新源码来编译安装nginx最新版1.10.3,所有的依赖也是最新的,便于第三方nginx模块开发 假定使用root身份安装 目前最新的源码地址汇总 ftp://ftp.csx.c ...
最新文章
- DP:Sumsets(POJ 2229)
- 计算机组成原理补充实验,计算机组成原理实验补充实验指导-实.doc
- labelImg 工具
- python 后台系统 源码_这是我见过最好的博客系统!附源码(前端、后台、APP、小程序都有)...
- 理工计算机系相关内容,弗吉尼亚理工大学计算机系
- Opencv之Vs编译
- HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
- Tableau数据可视化案例
- vim 的配置详解/键盘映射配置详解
- Yasm的作用及NASM详解
- 学习视频处理(一),了解HLS,流媒体,视频编码
- 空指针异常是什么意思
- 魔兽世界---熊猫人之谜
- 实用健指操:让你告别鼠标手、键盘手
- 杰理6905A更改蓝牙名字
- 超好用的java反编译工具(Java Decompiler)
- 计算机毕业设计Java电子病历系统(源码+系统+mysql数据库+lw文档)
- 七个人生工具 | SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
- 我真感觉软件测试不难,自己技术也过得去,为什么我找不到工作呢?面了好多家,都没有收到offer。
- 操作系统没有声音,是因为这个原因,汗!
热门文章
- 小程序中点击input控件键盘弹出时placeholder文字上移
- 2022-2028年中国搪胶行业市场深度分析及投资前景分析报告
- 【洛谷P2024】食物链
- 【转】android错误 aapt.exe已停止工作的解决方法
- jsp 环境配置记录
- 可以发张图片做链接用吗
- python八大排序算法 间书_python八大排序算法
- shell5.0密钥_8.使用Xshell5密钥登录liunx
- ad域不去用frs_年轻人就是不喜欢喝茶?那就用高级时尚的茶包装去吸引
- 多个数字数组_三菱ST语言教学(2)——数组的使用