Nginx配置geo

本文环境基于Ubuntu1604

nginx installation

1
sudo apt install -y nginx
1
sudo vim /etc/nginx/sites-enabled/site.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name site.com;

location /a {
alias /tmp;
index a.html;
}

location /b {
alias /tmp;
index b.html;
}
}
1
2
3
echo 'a' >> /tmp/a.html

echo 'b' >> /tmp/b.html
1
2
3
sudo nginx -t

sudo nginx -s reload
1
2
3
4
5
sudo sh -c "echo '127.0.0.1 site.com' >> /etc/hosts"

# 在本地访问该服务
curl -L site.com/a # a
curl -L site.com/b # b

ngx_http_geo_module

1
nginx -V | grep geo # nginx内置geo模块 --with-http_geoip_module
1
2
3
4
5
6
7
8
# $remote_addr 是Nginx内置变量 表示客户端IP地址
# $ip_whitelist 表示自定义变量
# default 0; 表示自定义变量默认值
# 127.0.0.1 1; 表示客户端IP地址与给定IP匹配时自定义变量的值
geo $remote_addr $ip_whitelist {
default 0;
127.0.0.1 1;
}
1
sudo vim /etc/nginx/sites-enabled/site.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
geo $remote_addr $ip_whitelist {
default 0;
127.0.0.1 1;
}

server {
listen 80;
server_name site.com;

location /a {
alias /tmp;
index a.html;
}

location /b {
if ($ip_whitelist = 0) {
return 403;
}

alias /tmp;
index b.html;
}
}
1
2
3
sudo nginx -t

sudo nginx -s reload
1
2
3
4
5
6
7
8
9
# 在本地访问该服务
curl -L site.com/a # a
curl -L site.com/b # b

sudo sh -c "echo '192.168.56.222 site.com' >> /etc/hosts"

# 在其他访问该服务
curl -L site.com/a # a
curl -L site.com/b # 403 Forbidden

参考