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\.tao\w+\.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\n";
}
}

  测试

[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\n';
}
}

  测试

[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\n';
}
} 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\n';
}
} 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

  

  

 

nginx 变量相关的map模块与split_clients模块及geo模块和geoip模块及keepalive介绍的更多相关文章

  1. Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令

    Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. Nginx 变量漫谈(四)

    在设置了“取处理程序”的情况下,Nginx 变量也可以选择将其值容器用作缓存,这样在多次读取变量的时候,就只需要调用“取处理程序”计算一次.我们下面就来看一个这样的例子:     map $args  ...

  3. 我眼中的 Nginx(三):Nginx 变量和变量插值

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  4. Nginx变量的实现机制

    Nginx有两种定义变量的方式,一种是在配置文件中使用set指令(由rewrite模块提供支持),另一种是在模块内定义变量. 变量相关结构体: struct ngx_http_variable_s { ...

  5. Nginx 变量漫谈(八)

    与 $arg_XXX 类似,我们在 (二) 中提到过的内建变量 $cookie_XXX 变量也会在名为 XXX 的 cookie 不存在时返回特殊值“没找到”:     location /test  ...

  6. Nginx 变量漫谈(三)

    也有一些内建变量是支持改写的,其中一个例子是 $args. 这个变量在读取时返回当前请求的 URL 参数串(即请求 URL 中问号后面的部分,如果有的话 ),而在赋值时可以直接修改参数串.我们来看一个 ...

  7. Nginx使用GeoIP模块来限制地区访问

    举例比如限制泰国地区的IP访问: 前提条件,安装了http geoip 或stream geoip模块的Nginx Plus或者开源nginx Maxmind的GeoLite Legacy数据库 1. ...

  8. Nginx Rewrite相关功能

    目录 Nginx Rewrite相关功能 ngx_http_rewrite_module模块指令: if指令: set指令: break指令: return指令: rewrite_log指令: rew ...

  9. Nginx 变量漫谈(七)

    在 (一) 中我们提到过,Nginx 变量的值只有一种类型,那就是字符串,但是变量也有可能压根就不存在有意义的值.没有值的变量也有两种特殊的值:一种是“不合法”(invalid),另一种是“没找到”( ...

随机推荐

  1. mysql 随笔

    (select GROUP_CONCAT(car_brand_name separator ',') carBrandName,supplier_id from ycej_supplier_carbr ...

  2. 040_字符串连接符 041_条件运算符目 042_运算符优先级_逻辑与或优先问题 043_自动类型转化 044_强制类型转换 045_基本类型常见错误_溢出_L问题

    040_字符串连接符 package test_package; /** * 字符串运算符 * @author * */public class TestOperator05 { public sta ...

  3. Yii2手动安装第三方扩展

    对于没有进入composer的扩展,请通通将他们下载到vendor内. 然后,打开vendor/yiisoft/extensions.php 文件,在里面的数组里增加一项,如下面代码 'SDK/Lvb ...

  4. 数据库程序接口——JDBC——功能第二篇——数据源之C3P0数据源

    综述 C3P0由三部分内容组成.实例化对象,各配置项的含义,以及加载配置项的方式. 实例化对象的方式有三种,第一种方式直接new ComboPooledDataSource,第二种方式使用工厂类Dat ...

  5. Java switch的用法

    控制流程语句之→switch选择判断语句  注意事项: 1.多个case后面的值不能重复: 2.switch后面小括号当中只能是下列数据类型: 基本数据类型:byte.short.char.int 引 ...

  6. Codeforces Round #577 (Div. 2) 题解

    比赛链接:https://codeforc.es/contest/1201 A. Important Exam 题意:有\(n\)个人,每个人给出\(m\)个答案,每个答案都有一个分值\(a_i\), ...

  7. 使用php-vmstat遇到的麻烦

    workerman-vmstat是一个基于workerman的扩展,用于监听服务器应用对内存.cpu消耗的友好的查看功能,具体介绍可以去git上看:    https://github.com/wal ...

  8. 吴裕雄 python 神经网络——TensorFlow 图、张量及会话

    import tensorflow as tf g1 = tf.Graph() with g1.as_default(): v = tf.get_variable("v", [1] ...

  9. redis (一) --- 基本使用

    概述 redis是基于key-value 我们所说的数据类型实际是 key-value 中的 value .文章主要介绍的是redis 几个重要的数据类型的使用. 简单使用 //keys patter ...

  10. phpstorm问题

    主题 PreferencesPreferencesPreferences 重要的事情说3边,而不是default setting Preferences->Appearance & Be ...