您好,登录后才能下订单哦!
# 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]
对于更复杂的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;
    }
}
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:不延迟处理突发请求
可以组合多个限制条件:
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;
}
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
        }
    }
}
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;
}
# 阻止常见漏洞扫描
location ~* (wp-admin|phpmyadmin) {
    deny all;
}
# 限制User-Agent
if ($http_user_agent ~* (wget|curl|scanbot)) {
    return 403;
}
结合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
        }
    }
}
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;
        }
    }
}
server {
    location /download/ {
        limit_conn addr 3;
        limit_rate_after 50m;
        limit_rate 1m;
        
        # 限制特定文件类型
        if ($request_uri ~* \.(zip|rar|tar)$) {
            limit_rate 500k;
        }
    }
}
limit_req_status 429;
limit_conn_status 503;
限流不生效:
内存不足:
nginx -t # 测试配置
dmesg | grep nginx # 查看OOM错误
误封问题:
$http_x_forwarded_for获取真实IP(需前端有代理)合理的访问限制配置能有效防止CC攻击、暴力破解等安全威胁,同时保障正常用户的访问体验。建议根据实际业务需求组合使用多种限制策略,并定期审查和调整规则。对于高安全要求的场景,建议结合专业的WAF防火墙使用。
注意:所有配置修改后需执行
nginx -s reload生效 “`
本文共计约1600字,涵盖了Nginx访问限制的主要配置方法和实践建议。实际应用中应根据具体业务需求调整参数值。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。