Nginx可以限制
代码语言:javascript
复制每个键值(例如,每个IP地址)的连接数
每个键值的请求率(在一秒钟或一分钟内允许处理的请求数)
连接的下载速度
请注意,可以在NAT设备后面共享IP地址,因此应谨慎使用IP地址限制
限制并发
代码语言:javascript
复制http {
.......... #省略部分内容
limit_conn_zone $binary_remote_addr$uri zone=xzbf:10m;
limit_conn_status 503;
server {
listen 80;
location / {
root html;
limit_conn xzbf 1;
}
}
}
参数解释
代码语言:javascript
复制#定义名为xzbf的limit_zone,大小10M内存来存储session,用客户IP及访问uri作为键值进行存储,作为会话的判断基准,一个IP一个会话,也可以变量$server_name作为会话的判断基准
limit_conn_zone $binary_remote_addr$uri zone=xzbf:10m;
#限制发生时向客户端返回的错误码
limit_conn_status 503;
#设定最大并发连接数 如果并发请求超过这个限制,那么将返回预定错误limit_conn_status
limit_conn xzbf 1;
限制请求速率
代码语言:javascript
复制http {
.......... #省略部分内容
limit_req_zone $binary_remote_addr$uri zone=xzqqsl:10m rate=1r/s;
server {
listen 80;
location / {
limit_req zone=xzqqsl burst=5 nodelay;
#limit_req zone=xzqqsl burst=5 delay=3;
}
}
}
参数解释
代码语言:javascript
复制#limit_req_zone 参数
zone=xzqqsl:10m #内存区域大小为10m,并且设定了名称为xzqqsl
rate=1r/s #表示请求的速率是1秒5个请求
#limit_req 参数
#表示这个参数对应的全局设置就是xzssql的那个内存区域
zone=xzqqsl
#表示队列的大小为5个请求,如果此时同一个客户端进来10个请求,那么只有5个请求可以按每秒一个的频率被处理,剩下五个将会拒绝处理,返回503状态码
burst=5
#使用此配置时,前3个请求delay会立即传递,后2个请求burst- delay会以总速率不超过指定速率的方式被延迟,因为超出了总突发大小,其他多余的请求将被拒绝,后续请求将被延迟
delay=3
错误页面的设置
代码语言:javascript
复制http {
.......... #省略部分内容
limit_req_zone $binary_remote_addr$uri zone=xzqqsl:10m rate=1r/s;
server {
listen 80;
root html;
error_page 503 /error_503.html;
location / {
limit_req zone=xzqqsl burst=5 nodelay;
}
location = /error_503.html {
root html;
}
}
}
限制带宽
代码语言:javascript
复制http {
limit_conn_zone $binary_remote_addr zone=down:10m;
server {
listen 80;
root /var/www/html; #文件服务路径
location / {
autoindex on; #开启索引功能
autoindex_exact_size off; #显示出文件的确切大小,单位是bytes
autoindex_localtime on; #显示文件大小
limit_conn down 1; #限制同一个IP只能建立一个下载连接
limit_rate_after 10m; #在10M以后的数据才开始进行速率限制
limit_rate 100k; #限制速率为100k
}
}
}
生成测试文件
代码语言:javascript
复制head -c 100000000 /dev/zero > /var/www/html/test #生成一个100M文件