Nginx访问限制怎么配置

发布时间:2022-04-26 17:19:52 作者:zzz
来源:亿速云 阅读:614
# Nginx访问限制怎么配置

## 前言

在Web服务器管理中,合理配置访问限制是保障服务稳定性和安全性的重要手段。Nginx作为高性能的Web服务器/反向代理服务器,提供了多种访问控制功能。本文将详细介绍Nginx中常见的访问限制配置方法,包括连接频率限制、请求速率限制、IP黑白名单等。

---

## 一、基础访问控制模块

### 1.1 allow/deny指令

Nginx通过`ngx_http_access_module`模块实现基础的IP访问控制:

```nginx
location /admin/ {
    deny  192.168.1.100;  # 禁止特定IP
    allow 192.168.1.0/24; # 允许整个子网
    deny  all;            # 默认拒绝其他所有
}

注意事项: - 规则按顺序匹配,遇到第一个匹配项即停止 - 通常最后设置deny all作为默认规则 - IPv6地址需要用方括号包裹:deny [2001:0db8::1]

1.2 geo模块实现动态黑白名单

对于更复杂的IP分组,可以使用ngx_http_geo_module

geo $blocked_ip {
    default         0;
    192.168.1.100   1;
    10.0.0.0/8      1;
    include         /etc/nginx/conf.d/blocked_ips.conf;
}

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

二、请求频率限制

2.1 limit_req模块

ngx_http_limit_req_module模块实现漏桶算法限流:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
    
    server {
        location /api/ {
            limit_req zone=api_limit burst=20 nodelay;
            proxy_pass http://backend;
        }
    }
}

参数说明: - zone=api_limit:10m:定义10MB内存空间存储状态 - rate=10r/s:每秒10个请求的限制 - burst=20:允许突发20个请求 - nodelay:不延迟处理突发请求

2.2 多维度限流策略

可以组合多个限制条件:

limit_req_zone $binary_remote_addr zone=per_ip:10m rate=5r/s;
limit_req_zone $server_name zone=per_server:10m rate=100r/s;

server {
    limit_req zone=per_ip burst=10;
    limit_req zone=per_server burst=50;
}

三、连接数限制

3.1 limit_conn模块

ngx_http_limit_conn_module限制单个客户端的并发连接数:

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    
    server {
        location /download/ {
            limit_conn conn_limit 5; # 每个IP最多5个连接
            limit_rate_after 10m;    # 下载10MB后开始限速
            limit_rate 100k;         # 限速为100KB/s
        }
    }
}

3.2 分级别限制示例

limit_conn_zone $binary_remote_addr zone=per_ip:10m;
limit_conn_zone $server_name zone=per_server:10m;

server {
    limit_conn per_ip 10;
    limit_conn per_server 200;
}

四、高级防护配置

4.1 防止恶意扫描

# 阻止常见漏洞扫描
location ~* (wp-admin|phpmyadmin) {
    deny all;
}

# 限制User-Agent
if ($http_user_agent ~* (wget|curl|scanbot)) {
    return 403;
}

4.2 动态黑名单管理

结合Lua脚本实现动态封禁:

http {
    lua_shared_dict ip_blacklist 10m;
    
    server {
        access_by_lua_block {
            local blacklist = ngx.shared.ip_blacklist
            if blacklist:get(ngx.var.remote_addr) then
                ngx.exit(ngx.HTTP_FORBIDDEN)
            end
        }
    }
}

五、实战配置示例

5.1 API接口保护

http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=2r/s;
    limit_conn_zone $binary_remote_addr zone=api_conn:10m;

    server {
        location /api/v1/ {
            limit_req zone=api burst=5 nodelay;
            limit_conn api_conn 3;
            limit_rate 50k;
            
            proxy_pass http://api_backend;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

5.2 下载服务器配置

server {
    location /download/ {
        limit_conn addr 3;
        limit_rate_after 50m;
        limit_rate 1m;
        
        # 限制特定文件类型
        if ($request_uri ~* \.(zip|rar|tar)$) {
            limit_rate 500k;
        }
    }
}

六、性能调优建议

  1. 内存分配:根据预估访问量合理设置zone内存大小
    • 1MB约可存储16,000个IP状态
  2. 日志监控:记录被限制的请求
    
    limit_req_status 429;
    limit_conn_status 503;
    
  3. 分级防护:结合防火墙和WAF实现多层防护
  4. 压力测试:使用ab、wrk等工具测试限流效果

七、常见问题排查

  1. 限流不生效

    • 检查nginx是否加载了对应模块
    • 确认指令位置(http/server/location块)
  2. 内存不足

    nginx -t # 测试配置
    dmesg | grep nginx # 查看OOM错误
    
  3. 误封问题

    • 通过$http_x_forwarded_for获取真实IP(需前端有代理)
    • 设置白名单机制

结语

合理的访问限制配置能有效防止CC攻击、暴力破解等安全威胁,同时保障正常用户的访问体验。建议根据实际业务需求组合使用多种限制策略,并定期审查和调整规则。对于高安全要求的场景,建议结合专业的WAF防火墙使用。

注意:所有配置修改后需执行 nginx -s reload 生效 “`

本文共计约1600字,涵盖了Nginx访问限制的主要配置方法和实践建议。实际应用中应根据具体业务需求调整参数值。

推荐阅读:
  1. Nginx web 网站访问限制登入验证
  2. Nginx如何配置

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx

上一篇:nginx代理socket.io服务的坑怎么解决

下一篇:nginx怎么配置多个虚拟主机

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》