nginx禁用真实IP
//
# nginx禁用真实IP
某些代理情况,nginx获取到的 "$http_x_forwarded_for" 才是真实IP,而remote_add 获取到的是空值,而这种情况封禁IP可以通过该方式封禁
Nginx配置
# cat /etc/nginx/nginx.conf
http {
log_format main '$server_name ' '$http_x_forwarded_for' ' $remote_addr ' '$remote_port ' '[$time_local] ' '$request_time ' '$upstream_response_time ' '$status $body_bytes_sent' ' $request $request_body $http_referer ' '"$http_user_agent" ' ' $real_ip ';
access_log /var/log/nginx/access.log main;
geo $http_x_forwarded_for $real_ip {
default "";
include /etc/nginx/blocked_ip; #后面新建一个封禁IP的文件
}
map $real_ip $block {
default 0;
"blocked" 1;
}
----省略----
server {
listen 80;
server_name yfklife.cn;
---省略----
if ($block) {
return 403;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
把需要封禁的IP写在这个文件里
# cat /etc/nginx/blocked_ip
120.46.194.216/32 "blocked";
1
2
2
参数说明
1.获取真实IP "http_x_forwarded_for"
2.定义了一个名为 $real_ip 的变量,通过$http_x_forwarded_for 的值来定义 $real_ip 地址,封禁的IP写入文件:/etc/nginx/blocked_ip
3.通过 geo 块对真实 $block 进行判断,如果属于 120.46.194.216/32 IP或者网段,则将其设置为字符串 "blocked",否则将其设置为默认值 ""
4.最后使用 map 块将 $real_ip 映射到一个变量 $block,如果 $real_ip 被设置为 "blocked",则将 $block 设置为 1,否则设置为 0
5.在server 层,对 $block 变量判断,如果为1,则返回403
//
如果此文章对您有帮助,点击 -->> 请博主喝咖啡 (opens new window)