geo $country {
default ZZ;
#include conf/geo.conf;
#proxy 172.18.144.211;
127.0.0.0/24 US;
127.0.0.1/32 RU;
10.1.0.0/16 RU;
192.168.1.0/24 UK;
}
curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.2' geo.ziyang.com
curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.1' geo.ziyang.com
curl -H 'X-Forwarded-For: 10.1.0.0,127.0.0.1,1.2.3.4' geo.ziyang.com
这里可以看出来,匹配规则实际上是遵循最长匹配的规则的。
geoip 模块geoip 模块可以根据 IP 地址生成对应的地址变量,用法与前面的也都类似,Nginx 是基于 MaxMind 数据库来生成对应的地址的。
功能:根据 IP 地址创建新变量
模块:ngx_http_geoip_module,默认未编译进 Nginx,通过 --with-http_geoip_module 禁用
使用这个模块是需要安装 MaxMind 库的,安装步骤如下:
安装 MaxMind 里 geoip 的 C 开发库(https://dev.maxmind.com/geoip/legacy/downloadable/ )
编译 Nginx 时带上 --with-http_geoip_module 参数
下载 MaxMind 中的二进制地址库,这个地址库是需要在指令中指定对应的地址的
使用 geoip_country 或者 geoip_city 指令配置好 nginx.conf
运行或者升级 Nginx
geoip_country 指令提供的变量指令
Syntax: geoip_country file; # 指定国家类的地址文件 Default: — Context: http Syntax: geoip_proxy address | CIDR; Default: — Context: http变量
$geoip_country_code:两个字母的国家代码,比如 CN 或者 US
$geoip_country_code3:三个字母的国家代码,比如 CHN 或者 USA
$geoip_country_name:国家名称,例如 “China”, “United States”
geoip_city 指令提供的变量指令
Syntax: geoip_city file; Default: — Context: http变量
$geoip_latitude:纬度
$geoip_longitude:经度
$geoip_city_continent_code:位于全球哪个洲,例如 EU 或 AS
与 $geoip_country 指令生成的变量重叠
$geoip_country_code:两个字母的国家代码,比如 CN 或者 US
$geoip_country_code3:三个字母的国家代码,比如 CHN 或者 USA
$geoip_country_name:国家名称,例如 “China”, “United States”
$geoip_region:洲或者省的编码,例如 02
$geoip_region_name:洲或者省的名称,例如 Zhejiang 或者 Saint Petersburg
$geoip_city:城市名
$geoip_postal_code:邮编号
$geoip_area_code:仅美国使用的邮编号,例如 408
$geoip_dma_code:仅美国使用的 DMA 编号,例如 807
keepalive 模块前面说的都是 Nginx 的变量相关的内容,其实 Nginx 还有一个很具有特色的模块,那就是 keepalive 模块,由于内容不是很多,所以我就直接写到这篇文章里面了,单写一篇显得内容不够哈。
这里指的是 HTTP 的 keepalive,TCP 也有 keepalive,后面会说。
而且是对客户端的 keepalive,不是对上游服务器的。
功能:多个 HTTP 请求通过复用 TCP 连接,可以实现以下功能:
减少握手次数
通过减少并发连接数减少了服务器资源消耗
降低 TCP 拥塞控制的影响,保证滑动窗口维持在一个最优的大小
Connection 头部
close:表示请求处理完就关闭连接
keepalive:表示复用连接处理下一条请求
Keepalive 头部:timeout=n,单位是秒,表示连接至少保持 n 秒
指令