Nginx常用模块介绍

举报
子都爱学习 发表于 2022/03/12 15:51:15 2022/03/12
【摘要】 1.Nginx目录索引当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给 ngx_http_autoindex_module 模块。ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。指令#启用或禁用目录列表输出,on开启,off关闭。Syntax: autoindex on | off;Default:...

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; #拒绝所有人
}
}

注意:denyallow的顺序是有影响的

默认情况下,从第一条规则进行匹配

如果匹配成功,则不继续匹配下面的内容。

如果匹配不成功,则继续往下寻找能匹配成功的内容。


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 当前等待请求的空闲客户端连接数

如何简单理解ReadingWritingWaiting

假设现在有两条船分别为:CSC船需要S船的1个物品,那么此时C船就要给S船发送一个消 /息。

1 S船收到这个消息时就是reading

2 S船将物资发送给C,这个时候就是writing

3 如果C船需要S船很多个物品,那么需要C船和S船建立起一个物资传送管道,不断的传送物 资。这个管道建立起来的时候,就是waiting

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。