Nginx 访问控制的多种方法

 更新时间:2025年12月08日 11:20:48   作者:猩火燎猿  
本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基础防护策略,感兴趣的可以了解一下

一、IP 白名单与黑名单

1. 允许/拒绝指定IP

location /admin/ {
    allow 192.168.1.100;   # 仅允许该IP访问
    allow 10.0.0.0/24;     # 或允许整个网段
    deny all;              # 其他全部拒绝
}

2. 全局黑名单

http {
    geo $block_ip {
        default 0;
        1.2.3.4 1;
        5.6.7.0/24 1;
    }
    server {
        if ($block_ip) {
            return 403;
        }
        ...
    }
}

geo模块适合大规模黑名单。

二、基于路径、方法、参数的访问控制

1. 路径限制

location /private/ {
    deny all;
}

2. 方法限制

location /api/ {
    if ($request_method !~ ^(GET|POST)$) {
        return 405;
    }
}

3. 参数限制

location /api/ {
    if ($arg_token = "") {
        return 403;
    }
}

三、HTTP 基本认证(Basic Auth)

1. 启用账号密码访问控制

location /secure/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
  • .htpasswd 文件可用 htpasswd 工具生成。

四、Referer/UA 防盗链与防刷

1. 防盗链(Referer控制)

location /static/ {
    valid_referers none blocked *.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

2. 防刷(UA控制)

if ($http_user_agent ~* "curl|bot|spider") {
    return 403;
}

五、客户端证书校验(mTLS)

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_client_certificate /etc/nginx/ssl/ca.crt;
    ssl_verify_client on;
    ...
}

适用于金融、政企等高安全场景。

六、限速限流(流量控制)

1. 单IP限速

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
location /api/ {
    limit_req zone=req_limit burst=10 nodelay;
}

2. 连接数限制

limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 10;

七、地理位置访问控制(GeoIP)

需安装第三方模块(如 ngx_http_geoip_module),可按国家/地区控制访问:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
    default 0;
    CN 1; # 仅允许中国
}
server {
    if ($allowed_country = 0) {
        return 403;
    }
}

八、API 安全与精细控制

1. 精细化路径/参数/方法控制

location /api/admin/ {
    allow 127.0.0.1;
    deny all;
}
location ~* /api/(delete|update)/ {
    if ($request_method != "POST") {
        return 405;
    }
}

2. 配合 OpenResty/Lua 动态访问控制

可以根据业务逻辑、数据库、Redis等动态判断是否允许访问。

九、企业级访问控制建议

  1. 重要接口建议多重保护(IP+密码+限流+Referer)
  2. 敏感路径建议只对内网或特定用户开放
  3. 日志记录所有被拒绝的访问,便于审计和溯源
  4. 定期更新黑名单、白名单,防止失效
  5. 结合 WAF、API 网关、堡垒机等安全产品提升防护等级

十、访问控制常见问题排查

  1. 控制未生效?
    • 检查 location 优先级、正则匹配顺序。
  2. 误封正常用户?
    • 检查 IP/Referer/UA 规则,避免误伤。
  3. 限流后接口不可用?
    • 合理设置 burst,允许偶发高峰。
  4. 黑名单太大影响性能?
    • 用 geo、map 或 Lua 动态判断,避免配置膨胀。

十一、完整访问控制配置示例

http {
    geo $block_ip {
        default 0;
        1.2.3.4 1;
        5.6.7.0/24 1;
    }
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    server {
        listen 80;
        server_name www.example.com;
 
        if ($block_ip) { return 403; }
 
        location /admin/ {
            allow 192.168.1.100;
            deny all;
            auth_basic "Admin";
            auth_basic_user_file /etc/nginx/.htpasswd;
        }
 
        location /static/ {
            valid_referers none blocked *.example.com;
            if ($invalid_referer) { return 403; }
        }
 
        location /api/ {
            limit_req zone=req_limit burst=20 nodelay;
            if ($request_method !~ ^(GET|POST)$) { return 405; }
            if ($arg_token = "") { return 403; }
        }
    }
}

十二、多级访问控制策略

1. 服务全局、Server级、Location级控制

  • http块:全局黑名单/限流/Geo
  • server块:站点级白名单/认证
  • location块:路径级精细控制

示例:

http {
    geo $block_ip { ... }
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=20r/s;
    server {
        if ($block_ip) { return 403; }
        location /admin/ {
            allow 10.0.0.0/8;
            deny all;
        }
        location /api/ {
            limit_req zone=req_limit burst=10 nodelay;
        }
    }
}

建议高优先级规则(如黑名单)放在上层,局部规则覆盖全局。

十三、基于Header的访问限制

1. 按Header内容限制访问

常用于API签名、Token、特定应用接入。

location /api/secure/ {
    if ($http_x_token != "your-secret-token") {
        return 403;
    }
}

2. 按Referer、Origin防止CSRF

if ($http_origin !~* ^https://trusted\.example\.com$) {
    return 403;
}

十四、按时间段控制访问

适用于限时活动、夜间维护、灰度发布等。

map $time_iso8601 $block_time {
    default 0;
    ~T02:..:.. 1;  # 02点整点到02:59:59 拒绝
}
server {
    if ($block_time) {
        return 403;
    }
}

也可用 Lua/定时脚本实现更复杂的时间控制。

十五、灰度/AB测试的访问控制

1. 按用户ID、Cookie、IP分流

map $cookie_abtest $upstream_group {
    default "old";
    "A" "new";
}
server {
    location / {
        proxy_pass http://$upstream_group;
    }
}

可结合 Lua 实现更灵活的灰度策略。

十六、动态黑白名单(与外部系统结合)

1. 结合 Redis/MySQL 实现动态名单

  • 用 OpenResty/Lua 读取 Redis/MySQL,将名单实时更新到共享内存,支持热更新。
  • 适合大规模名单、频繁变更场景。

示例:

access_by_lua_block {
    local redis = require "resty.redis"
    local red = redis:new()
    red:connect("127.0.0.1", 6379)
    local is_blocked = red:get("ip:" .. ngx.var.remote_addr)
    if is_blocked == "1" then
        ngx.exit(403)
    end
}

十七、日志、告警与审计

1. 记录被拒绝访问的请求

log_format rejectlog '$remote_addr $request $status $http_user_agent $time_local';
access_log /var/log/nginx/reject.log rejectlog if=$access_denied;

$access_denied 可用 map/Lua 动态赋值。

2. 集成告警

  • 结合 ELK、Prometheus、Zabbix,监控 403/405 等异常请求,自动触发告警。

十八、自动化管理与集中策略

1. 配置集中管理

  • 采用 include 引入统一黑白名单、认证配置,便于多站点维护。
include /etc/nginx/whitelist.conf;
include /etc/nginx/blacklist.conf;

2. 自动化工具

  • 配合 Ansible/SaltStack/Puppet 实现名单、限流、认证等策略的自动分发和热更新。

十九、与WAF/堡垒机/认证系统集成

1. WAF防护

  • 可用 Nginx+OpenResty/Lua-resty-waf 或接入云WAF,实现SQL注入、XSS等攻击防护。

2. 堡垒机/认证系统

  • 重要接口后端部署堡垒机或认证代理,前端Nginx只允许堡垒机IP访问。

3. 第三方认证(OAuth2、JWT等)

  • 可用 Lua 动态解析JWT、OAuth2 Token,按业务规则控制访问。

二十、常见安全场景实战

1. 管理后台只允许公司IP+二次认证

location /admin/ {
    allow 10.0.0.0/8;
    deny all;
    auth_basic "Admin Only";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

2. API接口防刷+签名校验

limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
    if ($http_x_sign = "") { return 403; }
}

3. 静态资源防盗链+限速

location /static/ {
    valid_referers none blocked *.example.com;
    if ($invalid_referer) { return 403; }
    limit_rate 100k;
}

二十一、访问控制优化建议

  1. 分层分级设计,重要资源多重防护
  2. 动态名单、限流、认证与自动化结合,提升响应和运维效率
  3. 日志与监控全覆盖,异常及时告警
  4. 定期安全审计和回溯,防止策略失效或被绕过

到此这篇关于Nginx 访问控制的多种方法的文章就介绍到这了,更多相关Nginx 访问控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx隐藏和伪造版本号的操作方法

    Nginx隐藏和伪造版本号的操作方法

    这篇文章主要介绍了Nginx隐藏和伪造版本号的操作方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • nginx里集成php模块安装配置步骤详解

    nginx里集成php模块安装配置步骤详解

    这篇文章主要为大家介绍了nginx里集成php模块安装配置步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Nginx下WordPress链接(url伪静态)301永久重定向实现方法

    Nginx下WordPress链接(url伪静态)301永久重定向实现方法

    在几个blog程序中折腾的结果,导致url连续二次变化。这是第三次了。 nginx 通过rewrite 使用 permanent; 参数 成301永久url重定向
    2012-09-09
  • Nginx+keepalived双机热备技术实践

    Nginx+keepalived双机热备技术实践

    在互联网的高可用性 服务中,单一的服务节点往往无法满足业务对稳定性和可用性的要求,双机热备是一种常见的高可用性解决方案,它通过两台服务器同时运行相同的服务,本文将详细介绍如何在 Nginx 环境中部署双机热备方案,需要的朋友可以参考下
    2025-01-01
  • Nginx简要安装配置方法图文教程

    Nginx简要安装配置方法图文教程

    这篇文章主要以图文结合的方式为大家详细介绍了Nginx简要安装配置方法教程,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • nginx实现动静分离的案例详解

    nginx实现动静分离的案例详解

    nginx 和 Tomcat 是两个不同的服务器软件,在分离部署方面有着各自的优势和适用场景,一般来说,Nginx 适合作为反向代理和负载均衡服务器,用于处理静态文件和高并发请求,本文将大家介绍一下nginx实现动静分离的案例,需要的朋友可以参考下
    2023-08-08
  • nginx常用配置conf的示例代码详解

    nginx常用配置conf的示例代码详解

    这篇文章主要介绍了nginx常用配置conf,包括配置vue项目,配置接口代理的代码详解,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Nginx反向代理如何到访问者机器上(后端调试)

    Nginx反向代理如何到访问者机器上(后端调试)

    这篇文章主要介绍了Nginx反向代理如何到访问者机器上(后端调试),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • nginx中gzip_types匹配content-type的方式

    nginx中gzip_types匹配content-type的方式

    这篇文章主要介绍了nginx中gzip_types匹配content-type的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Nginx反向代理入门实战指南

    Nginx反向代理入门实战指南

    反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式,下面这篇文章主要给大家介绍了关于Nginx反向代理的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论