1.nginx流量控制
主要命令(http模块):
limit_req_zone $binary_remote_addr zone=xa2402:10m rate=10r/s;
$binary_remote_addr:一个二进制ip
zone=xa2402:10m:用于存储每个IP地址状态以及被限制请求URL访问频率的共享内存区域,这个的组就是xa2402,16000个IP地址的状态信息,大约需要1MB,所以示例中区域可以存储160000个IP地址。
rate=10r/s:最大请求速率。在示例中,速率不能超过每秒10个请求
#######七层负载设置一个组xa2402
upstream xa2402 {
server 192.168.41.132:80 weight=1 max_fails=1 fail_timeout=1;
}
server {
listen 80;
server_name _;
location / {
########引用流量控制xa2402组
limit_req zone=xa2402 burst=20 nodelay;
root /usr/share/nginx/html;
index index.html 1.html;
#######报这些错误都会返回404错误页面(制作404界面.jpg)
error_page 404 401 401 501 502 500 /404.html;
#######访问控制,注意顺序
allow 192.168.41.131;
deny all;
}
location /404.html {
root /usr/share/nginx/html;}
}
2.nginx白名单
geo map 使用(在http模块)
#########geo中$limit默认0,白名单ip返回1
geo $limit {
default 0;
192.168.41.131 1;
#10.35.186.185;
}########map中$key受$limit值影响,0返回一个二进制ip,1返回空不继续执行流量控制命令
map $limit $key {
0 $binary_remote_addr;
1 "";
}
#######流量控制命令xa2402组中ip
limit_req_zone $key zone=xa2402:10m rate=5r/s;
3.制作错误返回404界面
error_page(在server模块使用)
生成图片转码:base64 图片路径jpg
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html 1.html;
#######报这些错误都会返回404错误页面(制作404界面.jpg)
error_page 404 401 401 501 502 500 /404.html;
}
location /404.html {
root /usr/share/nginx/html;}
}
4.nginx访问控制
allow允许,deny拒绝(server模块使用)
upstream xa2402 {
server 192.168.41.132:80 weight=1 max_fails=1 fail_timeout=1;
}
server {
listen 80;
server_name _;
location / {
########引用流量控制xa2402组
limit_req zone=xa2402 burst=20 nodelay;
root /usr/share/nginx/html;
index index.html 1.html;
#######报这些错误都会返回404错误页面(制作404界面.jpg)
error_page 404 401 401 501 502 500 /404.html;
#######访问控制,注意顺序
allow 192.168.41.131;
deny all;
}
location /404.html {
root /usr/share/nginx/html;}
}
(1)基于IP的访问控制:http_access_module
(2)基于用户的信任登录:http_auth_basic_module
5.变量
nginx变量全局引用
location /a/ {
return 200 $a;
}location /b/ {
set $a "hello nginx";
return 200 $a;
}[root@master ~]# curl 192.168.41.132/b/
hello nginx访问/b/返回hello nginx