您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。