欢迎光临中国葬花网
详情描述

Nginx 提供了多种访问控制方法,以下是主要的技术方案:

一、基于 IP 地址的控制

1. allow/deny 指令

location /admin/ {
    deny 192.168.1.100;           # 拒绝单个IP
    allow 10.0.0.0/24;           # 允许整个网段
    allow 172.16.0.0/16;
    deny all;                    # 拒绝其他所有
}

# 顺序很重要,从上到下匹配
location /api/ {
    allow 192.168.1.0/24;
    deny all;
}

2. geo 模块(更灵活的IP控制)

geo $blacklist {
    default 0;
    10.0.0.0/8 1;
    192.168.1.100 1;
    172.16.0.0/12 1;
}

server {
    location / {
        if ($blacklist) {
            return 403;
        }
        # 或者使用 map
    }
}

二、基于密码的认证(Basic Auth)

1. 使用 htpasswd 创建密码文件

# 创建密码文件
sudo apt install apache2-utils
htpasswd -c /etc/nginx/.htpasswd username

# 或使用 openssl
openssl passwd -apr1

2. Nginx 配置

location /secure/ {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # 可选:只为特定方法启用认证
    satisfy any;
    allow 192.168.1.0/24;
    deny all;
    auth_basic "Restricted";
}

三、基于请求特征的控制

1. 限制请求方法

location /api/ {
    limit_except GET POST {
        deny all;
    }
}

2. User-Agent 过滤

# 使用 map 模块
map $http_user_agent $badagent {
    default 0;
    ~*(curl|wget|scan|bot|spider) 1;
}

server {
    if ($badagent) {
        return 403;
    }
}

3. Referer 检查

valid_referers none blocked server_names
               *.example.com example.* ~\.google\.;

if ($invalid_referer) {
    return 403;
}

四、访问频率限制

1. limit_req 模块

# 定义限制区域
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    location /api/ {
        limit_req zone=one burst=5 nodelay;
        limit_req_status 429;  # 自定义状态码
    }
}

2. limit_conn 模块

# 限制并发连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;

location /download/ {
    limit_conn addr 1;  # 每个IP最多1个连接
}

五、基于时间的控制

# 使用 map 和 变量
map $time_iso8601 $outside_office_hours {
    default 0;
    "~^(\d{4})-(\d{2})-(\d{2})T([01][0-9]|2[0-3])" 0;
    "~^.*T(0[0-8]|2[0-3]).*" 1;  # 0-8点允许访问
}

location /maintenance/ {
    if ($outside_office_hours) {
        return 503;
    }
}

六、地理位置控制(需要 ngx_http_geoip2_module)

# 加载 GeoIP2 数据库
load_module modules/ngx_http_geoip2_module.so;

http {
    geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
        $geoip2_country_code country iso_code;
    }

    map $geoip2_country_code $allowed_country {
        default no;
        CN yes;
        US yes;
        JP yes;
    }

    server {
        if ($allowed_country = no) {
            return 403;
        }
    }
}

七、综合示例

# 多层访问控制示例
http {
    # 定义黑白名单
    geo $blocked_ip {
        default 0;
        10.0.0.0/8 1;
        192.168.100.0/24 1;
    }

    # 请求频率限制
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

    server {
        location /api/v1/ {
            # 1. IP过滤
            if ($blocked_ip) {
                return 403;
            }

            # 2. 频率限制
            limit_req zone=api burst=20 nodelay;

            # 3. 方法限制
            limit_except GET POST PUT DELETE {
                deny all;
            }

            # 4. 认证
            auth_basic "API Access";
            auth_basic_user_file /etc/nginx/api_users;

            # 继续处理请求...
        }

        # 管理后台
        location /admin/ {
            allow 192.168.1.0/24;
            deny all;

            # 需要HTTPS
            if ($scheme != "https") {
                return 301 https://$server_name$request_uri;
            }

            auth_basic "Admin Area";
            auth_basic_user_file /etc/nginx/admin_users;
        }
    }
}

八、最佳实践建议

分层防御:结合多种方法,不要依赖单一机制 白名单优于黑名单:默认拒绝,明确允许 日志记录:记录被拒绝的访问尝试 定期审计:审查访问日志和规则 测试规则:新规则上线前充分测试 使用 include:将访问控制规则放在单独文件中
include /etc/nginx/access_rules/*.conf;

九、安全注意事项

  • 避免在配置中暴露敏感信息
  • 定期更新密码文件和证书
  • 监控失败登录尝试
  • 使用 fail2ban 等工具配合防护
  • 考虑使用 WAF(Web应用防火墙)增强保护

选择哪种方法取决于具体的安全需求、性能考虑和运维复杂度。对于生产环境,建议采用多层次、深度防御的策略。

相关帖子
2026年,家庭在制定年度预算时,应该如何参考近期的物价变动情况?
2026年,家庭在制定年度预算时,应该如何参考近期的物价变动情况?
家庭需要为应对洪水准备哪些基础应急物品清单?
家庭需要为应对洪水准备哪些基础应急物品清单?
农村老年人慢性病管理:社区医疗资源如何有效利用?
农村老年人慢性病管理:社区医疗资源如何有效利用?
贺州市java开源商城二次开发#iphone软件开发,一站式建站服务
贺州市java开源商城二次开发#iphone软件开发,一站式建站服务
雾锁楼台的古画意境:山水画中云雾的表现技法赏析
雾锁楼台的古画意境:山水画中云雾的表现技法赏析
白银市网站开发设计#erp系统开发,一站式服务
白银市网站开发设计#erp系统开发,一站式服务
在异地提交了换证申请后,因故需要取消或修改信息该如何操作?
在异地提交了换证申请后,因故需要取消或修改信息该如何操作?
山南市网站优化公司#精准获客助手,模板建站
山南市网站优化公司#精准获客助手,模板建站
农业遥感如何帮助农民了解作物长势并预估产量,2026年有哪些新应用?
农业遥感如何帮助农民了解作物长势并预估产量,2026年有哪些新应用?
在选择医保定点药店时,我们应该重点考虑和对比哪些因素?
在选择医保定点药店时,我们应该重点考虑和对比哪些因素?
为什么说智能水表和电表的数据,正在成为评估个人信用的潜在依据?
为什么说智能水表和电表的数据,正在成为评估个人信用的潜在依据?
南充市安卓系统app开发@品牌网站定制开发,专业建站
南充市安卓系统app开发@品牌网站定制开发,专业建站
恋爱期间共同出资买房但未结婚,房产的归属问题应该如何妥善处理?
恋爱期间共同出资买房但未结婚,房产的归属问题应该如何妥善处理?
如果未来想买下政府持有的产权份额,具体的评估和购买流程是怎样的?
如果未来想买下政府持有的产权份额,具体的评估和购买流程是怎样的?
在2026年,面对越来越逼真的AI生成内容,我们该如何保持警惕?
在2026年,面对越来越逼真的AI生成内容,我们该如何保持警惕?
员工主动辞职时,当年未休的年休假工资应该如何正确计算和支付?
员工主动辞职时,当年未休的年休假工资应该如何正确计算和支付?
2026年想将家里的高额宽带套餐降级,运营商却设置重重障碍该怎么办?
2026年想将家里的高额宽带套餐降级,运营商却设置重重障碍该怎么办?
汉中市正规殡葬公司|丧葬服务公司,搭设灵堂
汉中市正规殡葬公司|丧葬服务公司,搭设灵堂
在停工停课期间,企业是否有权安排员工使用带薪年假或其他假期?
在停工停课期间,企业是否有权安排员工使用带薪年假或其他假期?
延安市网站建设推广服务#外贸网站建设,高端网站开发设计
延安市网站建设推广服务#外贸网站建设,高端网站开发设计