一个计算机技术爱好者与学习者

0%

好好学Nginx:Nginx配置黑白名单

1. 前言

在现代的Web服务中,控制访问权限是保障服务器安全和资源合理利用的重要手段。
Nginx作为一款高性能的Web服务器和反向代理服务器,提供了灵活的访问控制机制,可以通过配置黑白名单来实现对访问请求的精细化管理。
本文将学习如何在Nginx中配置黑白名单,掌握相关配置技巧。

2. Nginx访问控制的基本原理

Nginx通过allow和deny指令来实现访问控制。
这两个指令可以在http块、server块或location块中使用,用于指定哪些IP地址或IP段可以访问特定的资源。
访问控制的规则是按照配置文件中指令的顺序依次检查的,一旦匹配到规则,就会立即执行相应的操作(允许或拒绝访问)。
除了使用allow和deny指令,还可以使用geo模块。

3. 配置白名单

白名单是指允许特定的IP地址或IP段访问服务器资源,而拒绝其他所有IP访问的。以下是配置白名单的步骤和示例。

3.1. 使用allow和deny指令配置白名单

这是最直接的方法,适用于白名单规则较少的情况。

示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name example.com;

location / {
# 允许特定IP或IP段访问
allow 192.168.1.100; # 允许单个IP
allow 192.168.1.0/24; # 允许一个IP段

# 如果没有匹配到allow列表,则返回403 Forbidden
deny all;

# 其他配置
root /var/www/html;
index index.html;
}
}

3.2. 使用外部文件配置白名单

使用外部配置文件可以方便白名单的复用。
对于管理大量 IP 地址,创建单独的文件用于列出白名单IP,并在 Nginx 配置中包含它们会更有效。

1、创建配置文件 whiteip.conf

2、将相应的 denyallow 指令添加到配置文件
配置示例:

1
2
3
allow 192.168.1.100;  # 允许单个IP
allow 192.168.1.0/24; # 允许一个IP段
deny all; # # 如果没有匹配到allow列表,则返回403 Forbidden

3、在 Nginx 配置文件中包含配置文件

1
include /path/to/whiteip.conf;

3.3. 使用geo模块配置白名单

当白名单规则较多时,使用geo模块可以更方便地管理。
示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
http {
geo $allow_ip {
default 0; # 默认不允许访问
192.168.1.100 1; # 允许单个IP
192.168.1.0/24 1; # 允许一个IP段
}

server {
listen 80;
server_name example.com;

location / {
if ($allow_ip = 0) {
return 403; # 如果IP不在白名单中,返回403 Forbidden
}

# 其他配置
root /var/www/html;
index index.html;
}
}
}

4. 配置黑名单

黑名单是指拒绝特定的IP地址或IP段访问服务器资源,而允许其他所有IP的访问。以下是配置黑名单的步骤和示例。

4.1. 使用allow和deny指令配置黑名单

这是最直接的方法,适用于黑名单规则较少的情况。
示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80;
server_name example.com;

location / {
# 拒绝特定IP或IP段访问
deny 192.168.1.200; # 拒绝单个IP
deny 192.168.2.0/24; # 拒绝一个IP段

allow all; # 允许所有,可以省略

# 其他配置
root /var/www/html;
index index.html;
}
}

4.2. 使用外部文件配置黑名单

使用外部配置文件可以方便黑名单的复用。
对于管理大量 IP 地址,创建单独的文件用于列出黑名单IP,并在 Nginx 配置中包含它们会更有效。

1、创建配置文件 blockip.conf

2、将相应的 denyallow 指令添加到配置文件

配置示例:

1
2
3
deny 192.168.1.200;  # 拒绝单个IP
deny 192.168.2.0/24; # 拒绝一个IP段
allow all; # 允许所有,可以省略

3、在 Nginx 配置文件中包含配置文件

1
include /path/to/blockip.conf;

4.3. 使用geo模块配置黑名单

当黑名单规则较多时,使用geo模块可以更方便地管理。
示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
http {
geo $deny_ip {
default 0; # 默认允许访问
192.168.1.200 1; # 拒绝单个IP
192.168.2.0/24 1; # 拒绝一个IP段
}

server {
listen 80;
server_name example.com;

location / {
if ($deny_ip = 1) {
return 403; # 如果IP在黑名单中,返回403 Forbidden
}

# 其他配置
root /var/www/html;
index index.html;
}
}
}

5. 注意事项

顺序很重要:Nginx会按照配置文件中指令的顺序依次检查allow和deny指令。因此,通常建议将deny all或allow all放在最后,以确保所有未明确允许或拒绝的IP都能被正确处理。

测试配置:配置完成后,建议使用nginx -t命令检查配置文件的语法是否正确。如果语法正确,可以使用nginx -s reload命令重新加载配置文件。

查看日志:如果控制访问没有按预期工作,可以通过查看Nginx的错误日志(通常在/var/log/nginx/error.log)来排查问题。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-nginx-allow-deny/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~