Nginx常用模块介绍
1.Nginx目录索引
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给 ngx_http_autoindex_module 模块。
ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。
指令
#启用或禁用目录列表输出,on开启,off关闭。
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
#指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位。
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
#指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区,off UTC时间。
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location
示例 模拟搭建企业内部yum仓库
cat /etc/nginx/conf.d/mirror.myrepo.com.conf
server {
listen 80;
server_name mirror.myrepo.com;
charset utf-8;
root /code;
location / {
index index.html;
}
#提供yum仓库目录
location /repo {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
#使用rsync同步
rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/ /mirror/repo/
2.Nginx访问控制
ngx_http_access_module模块允许限制对某些客户端地址的访问。
指令
#允许配置语法
Syntax: allow address | CIDR | unix: | all;
Default: -
Context: http, server, location, limit_except
#拒绝配置语法
Syntax: deny address | CIDR | unix: | all;
Default: -
Context: http, server, location, limit_except
示例 只允许指定的来源P能访问/centos,其它网段全部拒绝。
cat /etc/nginx/conf.d/mirror.myrepo.com.conf
server {
listen 80;
server_name myrepo.com;
charset utf-8; #设定字符集,防止中文字符乱码显示。
autoindex on;
autoindex_exact_size off;
autoindex_locatime on;
location / {
index index.html;
}
location /centos {
allow 127.0.0.1;
allow 10.0.0.1/32; #允许地址或地址段
deny all; #拒绝所有人
}
}
注意:deny和allow的顺序是有影响的
默认情况下,从第一条规则进行匹配
如果匹配成功,则不继续匹配下面的内容。
如果匹配不成功,则继续往下寻找能匹配成功的内容。
3.Nginx身份认证
ngx_http_auth_basic_module模块允许使用HTTP基本身份验证,验证用户名和密码来限制对资源的访问。
指令
#使用HTTP基本身份验证协议启用用户名和密码验证。
Syntax: auth_basic string| off;
Default: auth_basic off;
Context: http, server, location, limit_except
#指定保存用户名和密码的文件
Syntax: auth_basic_user_file file;
Default:-
Context: http, server, location, limit_except
指定保存用户名和密码的文件,格式如下:
#可以使用htpasswd程序或"openssl passwd”命令生成对应的密码;
name1: passwd1
name2: passwd2
#使用htpaaswd创建新的密码文件,-c创建新文件-b允许命令行输入密码
yum install httpd-tools
htpasswd -b -c /etc/nginx/auth_conf myrepo123456
示例 基于用户名和密码认证实践。
cat /etc/nginx/conf.d/mirror.myrepo.com.conf
server {
listen 80;
server_name mirror.oldxu.com;
charset utf-8; #设定字符集,防止中文字符乱码显示。
autoindex on;
autoindex_exact_size off;
autoindex_locatime on;
location / (
index index.html;
}
location /centos {
auth_basic "Auth access Blog Input your Passwd!";
auth_basic_user_file /etc/nginx/auth_conf;
}
}
4.Nginx限流限速
下载限速:限制用户下载资源的速度,使用 ngx_http_core_module
请求限制:限制用户单位时间内所产生的Http请求数,使用 ngx_http_limit_req_module
连接限制:限制同一时间的连接数,及并发数限制。使用 ngx_http_limit_conn_module
场景实限制单位时间内所产生的Http请求数
1 .指令
Syntax: limit_req_zone key zone=name:size rate=rate;
Default:-
Context: http
Syntax: limit_conn zone number [burst=number] [nodelay];
Default: -
Context: http, server, location
2.基于来源IP对下载速率限制,限制每秒处理!次请求,但可以突发超过5个请求放入缓存区
# http标签段定义请求限制,rate限制速率,限制一秒钟最多一个IP请求
http {
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
}
server {
listen 80;
server_name mirror.myrepo.com;
#请求超过 剩下的将被延迟处理,请求数超过burst定义的数量,则返回503
limit_req zone=req_one burst=3 nodelay;
location / {
root /code;
index index.html;
}
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
#第一个参数:$binary_remote_addr表示通过这个标识来做限制,限制同一客户端ip地址。
#第二个参数:zone=req_one:10m表示生成一个大小为10M,名为req_one的内存区域,用来存储访问的 频次信息。
#第三个参数:rate=lr/s表示允许相同标识的客户端的访问频次,这里限制的是每秒 1次。
limit_req zone=req_one burst=3 nodelay;
#第一个参数:zone=req_one设置使用哪个配置区域来做限制,与上面limit_req_zone里的name对 应。
#第二个参数:burst=3,设置一个大小为3的缓冲区,当有大量请求过来时,超过了访问频次限制的请求 可以先放到这个缓冲区内。
#第三个参数:nodelay,超过访问频次并且缓冲区也满了的时候,则会返回503,如果没有设置,则所有 请求会等待排队。
场景实践二、限制客户端同一时刻的并发连接数
1 .指令
Syntax: limit_conn_zone key zone=name:size;
Default:-
Context: http
Syntax: limit_conn zone number;
Default: -
Context: http, server, location
2.设置共享内存区域和给定键值的最大允许个连接数。超过此限制时,服务器将返回503错误以 回复请求
http{
limit_conn_zone $binary_remote_addr zone=conn_mg:10m;
}
server {
listen 80;
server_name mirror.myrepo.com;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_conn conn_mg 2;
location / {
index index.html;
}
}
场景实践三、限制下载速度
server {
listen 80;
server_name mirror.myrepo.com;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_rate_after 100m; #达到 100m 开始限速 limit_rate 100k;
location / (
index index.html;
}
综合案例
限制web服务器请求数处理为1秒一个,触发值为5、限制用户仅可同时下载一个文 件。当下载超过 100M则限制下载速度为500k。如果同时下载超过2个视频,则返回提示"请联系进行会员充值"。
http {
limit_req_zone $binary_remote_addr zone=req_mg:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_mg:10m;
}
server {
listen 80;
server_name mirror.oldxu.com;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_req zone=req_mg burst=5 nodelay;
limit_conn conn_mg 1;
limit_rate_after 100m;
limit_rate 500k;
error_page 503 @errpage;
location @errpage {
default_type text/html;
return 200 '提示--> 请联系QQ: 552408925进行会员充值’;
}
location / {
index index.html;
}
}
5.Nginx状态监控
ngx_http_stub_status_module模块提供对基本状态信息的访问。
默认情况下不集成该模块,需要使用--with-http_stub_status_module集成。
指令
Syntax: stub_status;
Default:-
Context: server, location
示例配置
server {
listen 80;
server_name mirror.myrepo.com;
access_log off;
location /nginx_status {
stub_status;
}
}
此配置创建一个简单的网页,其基本状态数据可能如下所示:
提供以下状态信息
状态 |
含义 |
Active connections |
当前活跃连接数,包括Waiting等待连接数。 |
accepts |
已接收的总TCP连接数量。 |
handled |
已处理的TCP连接数量。 |
requests |
当前总http请求数量。 |
Reding 当前读取的请求头数量
Writing 当前响应的请求头数量。
Waiting 当前等待请求的空闲客户端连接数
如何简单理解Reading、Writing、Waiting
假设现在有两条船分别为:C、S。C船需要S船的1个物品,那么此时C船就要给S船发送一个消 /息。
1、 S船收到这个消息时就是reading。
2、 S船将物资发送给C船,这个时候就是writing。
3、 如果C船需要S船很多个物品,那么需要C船和S船建立起一个物资传送管道,不断的传送物 资。这个管道建立起来的时候,就是waiting
- 点赞
- 收藏
- 关注作者
评论(0)