nginx :
启动/停止/重启/重新载入:
sudo /etc/init.d/nginx start/stop/restart/reload (如果是源码安装 就是bin 下面的nginx文件)
nginx 速率限制:
- limit_rate_after 10m;
- limit_rate 20k;
表示在响应超过10M的时候,速率限制为20k
nginx 并发连接配置:
- limit_conn_zone $binary_remote_addr zone=one:10m; # 定义 数据区,来记录会话状态信息 ,后面有区块名,变量 和大小
-
limie_conn one 10;
第一个个是在http 块 里面 后面的是可以在server location http 块里面,这里表示 一个会话最多10 个连接,可以记录大约32w个会话消息,数量是根据
会话信息的长度为 32 或 64 bytes。 而 $binary_remote_addr 的长度为 4 bytes,会话信息的长度为 32 bytes。 当 zone 的大小为 1M 的时候,大约可以记录 32000 个会话信息 ==> 1024 * 1000 / 32 = 32000
nginx 简单访问控制:
- allow address | CIDR | unix: | all
- deny address | CIDR | unix: | all
可以在 http server location limit_except 块中使用, 表示 允许访问的 和 拒绝访问的。
例如:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
nginx 限制每秒的请求数:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
...
server {
...
location ~ \.php$ {
limit_req zone=one burst=5 nodelay;
}
}
}
- $binary_remote_addr 二进制远程地址
- zone=one:10m 定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址)
- rate=10r/s; 限制频率为每秒10个请求
- burst=5 允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。
- nodelay 超过的请求不被延迟处理,设置后15个请求在1秒内处理。
设置白名单:
geo $whiteiplist {
default 1;
10.11.15.161 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit zone=one:10m rate=10r/s;
limit_conn_zone $limit zone=addr:10m;
geo 模块定义了一个默认值是 1 的变量 whiteiplist,当在 ip 在白名单中,变量 whiteiplist 的值为 0,反之为 1
如果在白名单中--> whiteiplist=0 --> $limit="" --> 不会存储到 10m 的会话状态(one 或者 addr)中 --> 不受限制;
反之,不在白名单中 --> whiteiplist=1 --> $limit=二进制远程地址 -->存储进 10m 的会话状态中 --> 受到限制。
一般的配置,设置代理等等,后面更新。