NGINX 笔记 - GeoIP 限制策略配置
nginx.conf
通过模块 map
与 geopip
组合配置实现GeoIP区域限制,如以下示例:
- 组合
$http_host#$geoip_country_code
作为国家机构代码 hash key; - 组合
$http_host#$geoip_city
作为城市代码 hash key; - 开启
hostnames
匹配泛域名(可根据需要配置);
map $http_host#$geoip_country_code $site_country {
hostnames;
default 0;
www.kangzy.com# 1;
*.kangzy.com# 0;
*.kangzy.com#CN 1;
}
#
map $http_host#$geoip_city $site_city {
hostnames;
default 0;
www.kangzy.com# 0;
*.kangzy.com# 0;
*.kangzy.com#changsha 1;
}
第一个map
配置块:
- 对未匹配到任意国家的
www.kangzy.com
设置为1
; - 对未匹配到任意国家的
*.kangzy.com
设置为0
; - 匹配到国家
CN
的*.kangzy.com
设置为1
;
第二个map
配置块:
- 对未匹配到任意城市的
www.kangzy.com
设置为0
; - 对未匹配到任意城市的
*.kangzy.com
设置为0
; - 匹配到城市
CN
的*.kangzy.com
设置为1
;
map
map_hash_bucket_size 128;
map_hash_max_size 45948;
测试
# curl -v http://www.kangzy.com/ --resolve www.kangzy.com:80:A.B.C.E
会根据当前IP输出以下信息:
# curl -v http://www.kangzy.com/ --resolve www.kangzy.com:80:A.B.C.E
* Added www.kangzy.com:80:A.B.C.E to DNS cache
* About to connect() to www.kangzy.com port 80 (#0)
* Trying A.B.C.E...
* Connected to www.kangzy.com (A.B.C.E) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
> Host: www.kangzy.com
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
> Accept-Encoding: gzip, deflate, sdch, br
> Accept-Language: zh-CN,zh;q=0.8
> Connection: keep-alive
>
< HTTP/1.1 200 OK
< Server: rednetcloud/3.0.9
< Date: Fri, 23 Nov 2018 04:58:27 GMT
< Content-Type: text/plain
< Transfer-Encoding: chunked
< Connection: keep-alive
<
Host: www.kangzy.com Server: www.kangzy.com Country: CN City: Changsha Region: 11 Allow: 1 1
其中输出内容中
Host: www.kangzy.com Server: www.kangzy.com Country: CN City: Changsha Region: 11 Allow: 1 1
分别输出 $http_host $server_name $geoip_country_code $geoip_city $site_country $site_city
.