全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

访问控制与IP白名单

NGINX 提供基于 IP 的访问控制能力,通过 allowdeny 指令可精确限制哪些客户端可以访问特定资源。

核心指令

ngx_http_access_module 模块提供访问控制功能,默认编译并启用。

  • allow address|CIDR|unix:|all — 允许指定 IP 或网段访问
  • deny address|CIDR|unix:|all — 拒绝指定 IP 或网段访问

指令按配置顺序逐条匹配,命中即停止。

基本配置

IP白名单

仅允许特定 IP 访问管理后台:

nginx
location /admin/ {
    allow 192.168.1.100;
    allow 10.0.0.0/8;
    deny all;
    
    proxy_pass http://backend;
}

匹配顺序从上到下,deny all 必须放在最后,否则会提前拒绝所有请求。

IP黑名单

拒绝已知恶意 IP,允许其他所有流量:

nginx
location /api/ {
    deny 203.0.113.50;
    deny 198.51.100.0/24;
    allow all;
    
    proxy_pass http://app_server;
}

高级用法

按 Location 独立控制

不同路径设置不同的访问策略:

nginx
server {
    listen 80;
    server_name example.com;

    # 公开区域
    location /public/ {
        allow all;
    }

    # 内网接口
    location /internal/ {
        allow 172.16.0.0/12;
        deny all;
    }

    # 运维管理
    location /ops/ {
        allow 192.168.1.0/24;
        allow 10.10.10.5;
        deny all;
    }
}

全局+局部组合控制

在 server 块设置全局策略,在 location 块覆盖:

nginx
server {
    listen 80;
    server_name example.com;

    # 全局拒绝恶意IP
    deny 203.0.113.0/24;

    location / {
        # 继承server块策略
        proxy_pass http://backend;
    }

    location /secure/ {
        allow 10.0.0.0/8;
        deny all;  # 覆盖全局策略
        proxy_pass http://secure_backend;
    }
}

使用 include 管理IP列表

IP 较多时抽离到独立文件:

nginx
# ip_whitelist.conf
allow 192.168.1.0/24;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 203.0.113.100;
nginx
location /admin/ {
    include /etc/nginx/conf.d/ip_whitelist.conf;
    deny all;
    proxy_pass http://backend;
}

将 IP 列表抽离到独立文件便于维护和版本控制,适合频繁变动的场景。

与 geo 模块配合

IP 数量庞大时,使用 geo 模块更高效:

nginx
http {
    geo $whitelist {
        default 0;
        192.168.1.0/24 1;
        10.0.0.0/8 1;
        172.16.0.0/12 1;
    }

    server {
        location /admin/ {
            if ($whitelist = 0) {
                return 403;
            }
            proxy_pass http://backend;
        }
    }
}

geo 模块在内存中使用基数树匹配 IP,性能优于大量 allow/deny 指令。

要点总结

  • allow/deny 指令按顺序逐条匹配,命中即停止
  • deny all 必须放在白名单规则的末尾
  • 不同 location 可独立设置访问策略
  • 大量 IP 时使用 include 文件或 geo 模块管理
  • geo 模块使用基数树匹配,性能优于逐条 allow/deny
  • 被拒绝的请求返回 403 Forbidden

📝 发现内容有误?点击此处直接编辑

← 上一篇 禁止目录浏览与敏感文件保护
下一篇 → 跨域资源共享(CORS)安全配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库