什么是geo?
根据客户端地址创建新变量。
geo有什么用?
相当于ip列表,和$remote_addr 的 匹配情况返回值。用geo更优雅。
geo是必须的么?
不是必须的,用if也可以完成他的功能,但是geo更优雅,更好维护。
geo的例子
常用写法:
geo $remote_addr $geo {
default 0; # 这里0和1都是可以的
127.0.0.1 1;
192.168.0.1 1;
192.168.1.0/24 1; # 网段写法,都可以
}
然后在location中写:
# 如果不在白名单,返回403
location = / {
if($geo = 0){
return 403;
}
}
不写 $remote_addr 可以么?
可以的,以下2种写法作用相同:
geo $geo{} # 默认就是$remote_addr
geo $remote_addr $geo{}
当然,也可以自定义地址:
geo $custom_addr $geo{} # $custom_addr地址 从 geo列表中匹配
注意2条原则:
1:如果geo指令后不输入
a
d
d
r
e
s
s
那
么
默
认
就
使
用
变
量
address 那么默认就使用变量
address那么默认就使用变量remite_addr作为ip地址
2:{} 内的指令匹配:优先最长匹配