nginx ngx_http_geo_module 模块试用小记

这两天一直在折腾IP库、调度方面的东西,正好趁这个机会玩一下nginx geo这个模块。开源有开源的好处,你所踩的坑,所遇到的问题,可能别人早已经预见过,于是你所需要的只是试用......

一:安装

a.测试时需要用到nginx echo这个模块
[root@localhost peiqiang]# wget https://github.com/openresty/echo-nginx-module/archive/master.zip
[root@localhost peiqiang]# unzip master

b.安装nginx
[root@localhost peiqiang]# tar zxvf nginx-1.7.6.tar.gz
[root@localhost peiqiang]# cd nginx-1.7.6
[root@localhost nginx-1.7.6]# useradd -s /sbin/nologin www
[root@localhost nginx-1.7.6]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/home/peiqiang/echo-nginx-module-master
[root@localhost nginx-1.7.6]# make && make install

二:配置

vim /usr/local/nginx/conf/nginx.conf

user  www;
worker_processes  1;

events {
    worker_connections  1024;
}

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.0-126.255.255.255 abroad|abroad;
        127.0.0.0-223.255.254.255   beijing|cmcc;
    }

    server {
        listen       172.16.108.112:80;
        server_name  localhost;

        location /iptool {
            default_type text/plain;
            echo $address;
        }
    }

}


  geo $arg_ip $address 表示使用客户端请求的ip参数值当做ip,如http://172.16.108.112/iptool?ip=144.144.144.144,意思是使用144.144.144.144当做ip过geo这个模块,查询属于127.0.0.0-223.255.254.255这个网段,因此就将这个网段对应的值beijing|cmcc赋值给$address。好绕…,我相信你理解我的意思了...

三:测试

[root@localhost ~]# curl "http://172.16.108.112/iptool?ip=144.144.144.144"
beijing|cmcc

自言自语:

nginx geo模块的想象力还是很多的,例如你可以用这货当做cdn的ip调度用,也可以利用他实现一个ip138,或者当你的业务处于不同的运营商机房也可以用他当做负载均衡器做ip链路调度,等等。最近各种事情忙,博客可能会停止更新...

参考资料:

官方geo模块指南: http://nginx.org/en/docs/http/ngx_http_geo_module.html

运维生存时间博客: http://www.ttlsa.com/nginx/using-nginx-geo-method/

nginx echo模块: https://github.com/openresty/echo-nginx-module