文章目录
- 一、Nginx目录索引
- 二、Nginx状态监控
- 三、Nginx访问控制
- 四、Nginx资源限制
- 五、Nginx访问限制
- 六、Nginx location
一、Nginx目录索引
ngx_http_autoindex_module 模块处理以斜杠字符(‘/’)结尾的请求,并生成目录列表。
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给模块。
1. 指令
# 启用或 禁用目录列表输出,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
2. 实操
[root@study ~]# cat /etc/nginx/conf.d/autoindex.conf
server {
listen 80; # 监听80端口
server_name study.com; # 访问名称
charset utf-8,gbk;
location / {
root /module;
autoindex on; # 开启列表输出
autoindex_exact_size off; # 显示大概单位
autoindex_localtime on; # 本地时区
}
}
# 准备对应得目录,
[root@study ~]# mkdir /module/{centos,ubuntu,redhat}/ -p
# 检测nginx语法
[root@study ~]# nginx -t
# 重启nginx服务
[root@study ~]# systemctl restart nginx
3. 效果显示
二、Nginx状态监控
ngx_http_stub_status_module 模块提供对应基本状态信息的访问。
默认情况下不构建此模块,使用–with-http_stub_status_module 配置参数启用它。
1. 指令
Syntax: stub_status;
Default: —
Context: server, location
2. 实操
[root@study ~]# cat /etc/nginx/conf.d/autoindex.conf
server {
listen 80;
server_name ma.study.com;
charset utf-8,gbk;
location / {
root /module;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
stub_status; # 状态监控
}
}
3. 显示结果
4. 参数解释
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
Active connections # 当前活动客户端连接数,包括waiting等待连接数
accepts # 已接收总的TCP连接数
handled # 已处理总的TCP连接数
requests # 客户端总的http请求数
Reading # 当前nginx读取请求头的连接数
Writing # 当前nginx将响应写回客户端的连接数
Waiting # 当前等待请求的空闲客户端连接数
# 注意:一次TCP的连接,可以发起多次http的请求,如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接
三、Nginx访问控制
ngx_http_access_module 模块允许限制对某些客户端地址的访问。
1. 指令
# 允许配置语法
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
2. 实操
[root@study ~]# cat /etc/nginx/conf.d/module.conf
server {
listen 80;
server_name module.study.com;
location /nginx_status {
stub_status;
deny 10.0.0.1/32; # 拒绝指定的地址或地址段
allow all; # 允许所有的地址
}
}
3. 基于来源的IP地址做限制
# 1. 拒绝10.0.0.1 来源的IP访问,其他人允许
location /nginx_status {
stub_status;
deny 10.0.0.1/32; # 拒绝指定的地址或地址段
allow all; # 允许所有的地址
}
# 2. 允许10.0.0.1来源的IP访问,其他人全部拒绝
location /nginx_status {
stub_status;
allow 10.0.0.1/32;
deny all;
}
# 3. 实际配置监控nginx状态时,仅允许该服务器的回环地址访问127.0.0.1
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
四、Nginx资源限制
ngx_http_auth_basic_module 模块允许使用HTTP基本身份验证,验证用户名和密码来限制对资源的访问。
1. 指令
#使用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
2. 实操
# 1. 查看yum仓库有没有htpaawd包
[root@study ~]# yum provides htpasswd # 查看htpasswd属于哪一个包
# 2. 安装htpasswd包
[root@study ~]# yum install -y httpd-tools
# 3. 生成一个密码文件,密码文件的格式 name:password(加密)
[root@study ~]# htpasswd -c -b /etc/nginx/auth_conf study study123
Adding password for user study
# 4. 查看密码文件
[root@study ~]# cat /etc/nginx/auth_conf
study:$apr1$vBXH4VUp$FZ5gurt4yRodqCdxiXwRN/
# 5. 配置nginx,限制对应的资源
[root@study ~]# cat /etc/nginx/conf.d/test1.study.com.conf
server {
listen 80;
server_name test1.study.com;
location /download {
root /module;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
auth_basic "Please Passwrod!!!";
auth_basic_user_file /etc/nginx/auth_conf;
}
}
# 6. 检测nginx 语法
[root@study ~]# nginx -t
# 7. 重启nginx
[root@study ~]# systemctl restart nginx
3. 最终结果
五、Nginx访问限制
经常会遇到这种情况,服务器流量异常,负载过大等等,对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数,进行限制;
ngx_http_limit_conn_module 模块用于限制定义key的连接数,特别是来自单个IP地址的连接数。
并非使用连接都被计算在内,仅当连接已经读取了整个请求时才计算连接。
1. 指令
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
2. 实操
# 设置共享内存区域和给定键值的最大允许连接数,超过此限制时,服务器将返回错误以回复请求。
# http标签段定义连接限制
# 注意:这里需要使用公网地址,可以测试
[root@study ~]# cat /etc/nginx/conf.d/test1.study.com.conf
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
server {
listen 80;
server_name test1.study.com;
limit_conn conn_zone 1;
location / {
root /code;
index index.html;
}
}
ngx_http_limit_req_module 模块用于限制定义key的请求的处理速率,特别单一的IP地址的请求的处理速率
1. 指令
# 模块名ngx_http_limit_req_module
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
2. 实操
# 定义限制的key(基于什么来做限制,IP地址)
[root@study conf.d]# cat test1.study.com.conf
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
server {
listen 80;
server_name test1.study.com;
limit_req zone=req_zone burst=5 nodelay;
limit_req_status 412;
location / {
root /code/test1;
index index.html;
}
}
# 进行简单的压力测试
[root@study conf.d]# ab -n 50 -c 20 http://test1.study.com/index.html
六、Nginx location
使用nginx location可以控制访问网站的路径,但一个server可以有多个location配置,多个location的优先级改如何区分?
1. Location 语法示例
location [=|^~|~|~*|!~|~!*|/] /uri/ {...
}
2. location 语法优先级排序