nginx配置ip访问目录
在Nginx服务器中,有时我们需要限制特定IP地址才能访问某些目录。这是一个常见的安全需求,可以有效防止未经授权的访问。介绍如何通过Nginx配置来实现基于IP的目录访问控制,并提供多种解决方案。
解决方案
主要思路是通过Nginx的ngx_http_access_module
模块,在location块中使用allow和deny指令来设置允许或拒绝的IP地址。根据实际需求,可以选择针对单个IP、多个IP、或者整个网段进行访问控制。
方法一:单个IP访问控制
这是最简单的场景,假设我们只想让192.168.1.100这台设备能够访问指定目录:
nginx
server {
listen 80;
server_name yourdomain.com;</p>
<pre><code>location /protected/ {
# 允许指定IP访问
allow 192.168.1.100;
# 拒绝其他所有IP
deny all;
# 目录内容配置
root /var/www/html;
index index.html index.htm;
}
}
方法二:多个IP访问控制
当需要允许多个IP访问时,可以在location块中添加多条allow语句:
nginx
location /protected/ {
# 允许多个IP访问
allow 192.168.1.100;
allow 192.168.1.101;
allow 192.168.1.102;
deny all;</p>
<pre><code>root /var/www/html;
index index.html index.htm;
}
方法三:子网访问控制
如果要允许一个子网内的所有设备访问,可以使用CIDR表示法:
nginx
location /protected/ {
# 允许整个192.168.1.0/24网段访问
allow 192.168.1.0/24;
deny all;</p>
<pre><code>root /var/www/html;
index index.html index.htm;
}
方法四:结合geo模块
对于更复杂的场景,可以使用geo模块定义IP范围:
nginx
http {
geo $allowed_ip {
default 0;
192.168.1.0/24 1;
172.16.0.0/12 1;
}</p>
<pre><code>server {
location /protected/ {
if ($allowed_ip = 0) {
return 403;
}
root /var/www/html;
index index.html index.htm;
}
}
}
完成上述配置后,记得重启Nginx使配置生效:
bash
sudo systemctl restart nginx
以上就是几种常见的Nginx基于IP的目录访问控制方法。根据实际需求选择合适的方案,既能保证安全性,又不会影响正常业务的开展。在生产环境中,建议定期检查和更新IP白名单,确保安全策略的有效性。