map 模块指令默认编译进nginx的
Syntax: map string $variable { ... } # 表示string匹配到{}里的值或变量赋值给$variable Default: — Context: http Syntax: map_hash_bucket_size size; Default: map_hash_bucket_size 32|64|128; Context: http Syntax: map_hash_max_size size; Default: map_hash_max_size 2048; Context: http
配置
[root@python vhast]# cat mo.conf map $http_host $name { hostnames; default 0; ~map.taow+.org.cn 1; *.taohui.org.cn 2; map.taohui.tech 3; map.taohui.* 4; } map $http_user_agent $mobile { default 0; "~Opera Mini" 1; } server { listen 10001; default_type text/plain; location /{ return 200 "$http_host:$name:$mobile "; } }
测试
[root@python vhast]# curl -H 'Host: map.tao123.org.cn' 127.0.0.1:10001 map.tao123.org.cn:1:0 [root@python vhast]# curl -H 'Host: map.taohui.pub' 127.0.0.1:10001 map.taohui.pub:4:0 [root@python vhast]# curl -H 'Host: map.taohui.tech' 127.0.0.1:10001 map.taohui.tech:3:0
split_clients 指令介绍
Syntax: split_clients string $variable { ... } Default: — Context: http
配置
split_clients "${http_testcli}" $variant { 0.51% .one; 20.0% .two; 50.5% .three; #40% .four; * ""; } server { server_name split_clients.com; default_type text/plain; location /{ return 200 'ABtest$variant '; } }
测试
[root@python vhast]# curl -H 'testcli: 456152gy323v' split_clients.com/ ABtest.two [root@python vhast]# curl -H 'testcli: 4561238852ohugy323v' split_clients.com/ ABtest.three [root@python vhast]# curl -H 'testcli: 45' split_clients.com/ ABtest.two [root@python vhast]# curl -H 'testcli: 45ftdr' split_clients.com/ ABtest
geo模块:根据IP创建新变量
指令
Syntax: geo [$address] $variable { ... } Default: — Context: http
配置
server { server_name split_clients.com; default_type text/plain; location /{ return 200 '$country '; } } geo $country { default ZZ; #include conf/geo.conf; proxy 192.168.183.4; 127.0.0.0/24 US; 127.0.0.1/32 RU; 10.1.0.0/16 RU; 192.168.1.0/24 UK; }
测试
[root@python vhast]# curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.2' split_clients.com US [root@python vhast]# curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.1' split_clients.com RU [root@python vhast]# curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.1,1.2.3.4' split_clients.com ZZ
使用变量查找用户地理位置geoip模块;默认未启用此功能;--with-http_geoip_module 编译进去
安装模块依赖的库
yum -y install GeoIP GeoIP-devel GeoIP-data
编译安装依赖库
wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.12/GeoIP-1.6.12.tar.gz tar xf GeoIP-1.6.12.tar.gz cd GeoIP-1.6.12/ ./configure make && make install
重新编译nginx
[root@python nginx-1.15.9]# ./configure --prefix=/data/web --sbin-path=/usr/bin --user=nginx --group=nginx --with-http_stub_status_module --with-http_auth_request_module --with-http_sub_module --add-module=/root/nginx-http-concat --with-http_addition_module --with-http_ secure_link_module --with-http_geoip_module [root@python nginx-1.15.9]# make [root@python nginx-1.15.9]# mv /usr/bin/nginx{,.07.13.16.31} [root@python nginx-1.15.9]# mv objs/nginx /usr/bin/
指令介绍
Syntax: geoip_country file;#指定国家的地址文件 Default: — Context: http Syntax: geoip_proxy address | CIDR; #信任的IP地址 Default: — Context: http
变量介绍
geoip_city 提供的变量
配置在http字段配置
server { server_name split_clients.com; default_type text/plain; location /{ return 200 'country:$geoip_country_code,$geoip_country_code3,$geoip_country_name country from city:$geoip_city_continent_code,$geoip_city_country_code3,$geoip_city_country_name '; } } geo $country { default ZZ; #include conf/geo.conf; proxy 192.168.183.4; 127.0.0.0/24 US; 127.0.0.1/32 RU; 10.1.0.0/16 RU; 192.168.1.0/24 UK; } geoip_country /usr/share/GeoIP/GeoIP-initial.dat; geoip_city /usr/share/GeoIP/GeoIPCity-initial.dat; geoip_proxy 192.168.183.4/32; geoip_proxy_recursive on;
测试
[root@python vhast]# curl -H 'X-Forwarded-For: 104.248.224.193,121.8.98.197' split_clients.com country:CN,CHN,China country from city:AS,CHN,China [root@python vhast]# curl -H 'X-Forwarded-For: 104.248.224.193' split_clients.com country:US,USA,United States country from city:NA,USA,United States [root@python vhast]# curl -H 'X-Forwarded-For: 77.48.21.58' split_clients.com country:CZ,CZE,Czech Republic country from city:EU,CZE,Czech Republic
keepalive模块
指令介绍
Syntax: keepalive_disable none | browser ...;#对某些浏览器不适应此功能 Default: keepalive_disable msie6; Context: http, server, location Syntax: keepalive_requests number; #表示在一个http最多执行多少个请求默认100 Default: keepalive_requests 100; Context: http, server, location Syntax: keepalive_timeout timeout [header_timeout]; 跟两个时间,第一个是当请求完第一次后多长时间没请求我就断开连接默认75秒;第二个表示向浏览器返回这个连接保持的时间 Default: keepalive_timeout 75s; Context: http, server, location