内容概述
1.nginx常用模块
-1.1 目录索引模块
-1.2 nginx访问控制模块
-1.3 nginx状态监控模块
-1.4 nginx访问限制模块
内容详细
1.nginx常用模块
1.1 目录索引模块
ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求并,生成目录列表.
1.语法:
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
2.常用参数:
# autoindex_exact_size on | off;
默认为on,显示出文件的"确切大小",单位是bytes.
可以修改为off,显示出文件的"大概大小",单位是KB或者MB甚至GB.
# autoindex_localtime on | off;
默认为off,显示的文件为GMT时间(比咱们的北京时间差8小时)
修改为on,显示的文件时间为文件的服务器时间(文件在服务器上显示的时间)
# charset utf-8,gbk;
默认中文目录乱码,添加这个可以解决乱码问题.
3.配置实例:
vim /etc/nginx/conf.d/www.autoindex.com.conf
server {
listen 80;
server_name www.autoindex.com;
charset utf-8,gbk;
localtion / {
root /tmp/autoindex; # 查找/tmp/autoindex/index.html
index index.html index.htm;
}
location /download {
root /tmp/autoindex; # 查找/tmp/autoindex/download
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
1.2 nginx访问控制模块
1.基于IP的访问控制 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
示例,拒绝指定的ip,其他的全部允许
vim /etc/nginx/conf.d/www.maliao.com.conf
server {
listen 80;
server_name www.maliao.com;
charset utf8;
location / {
root /tmp/html5-mario;
autoindex on;
deny 192.0.0.1; # 拒绝192.0.0.1网段访问
allow all; # 允许除了192.0.0.1网段的其他访问
}
}
示例2:只允许指定的ip访问,其他全部拒绝
server {
listen 80;
server_name www.maliao.com;
location / {
root /tmp/html5-mario;
autoindex on;
allow 192.0.0.1/24;
allow 127.0.0.0;
deny all;
}
}
2.基于用户登录的访问控制 http_auth_basic_module
语法:
# 访问的提示字符串:
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
基于用户登录认证配置实践
# 首先需要安装httpd-tools,这个包中有我们需要的htpasswd命令
yum install httpd-tools
# 创建密码文件
htpasswd -c /etc/nginx/auth_basic lhd
New password:
Re-type new password:
Adding password for user lhd
# 添加一个登录用户
htpasswd /etc/nginx/auth_basic egon
New password:
Re-type new password:
Adding password for user lty
# 密码文件内容
cat /etc/nginx/auth_basic
lhd:$apr1$aABeV4BC$kyetu7dPQWybG/VQAufjc.
lty:$apr1$/KUB/T8i$nCzmeOVcUh1bIYJZXgaO3.
# 配置访问登录
server {
listen 80;
server_name www.maliao.com;
location / {
root /tmp/html5-mario;
index index.html;
auth_basic " 小伙子快来玩啊!";
auth_basic_user_file /etc/nginx/auth_basic;
}
}
1.3 nginx状态监控模块
ngx_http_stub_status_module模块能提供对基本状态信息的访问
默认情况下我们不构建此模块,应使用 --with-http_stub_status_module 配置参数来启用它
语法:
Syntax: stub_status;
Default: —
Context: server, location
配置:
server {
listen 80;
server_name www.maliao.com;
location / {
root /tmp/html5-mario;
index index.html;
auth_basic " 小伙子快来玩啊!";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /nginx_status {
stub_status;
}
}
# 访问 http://www.maliao.com/basic_status
Active connections: 2
server accepts handled requests
71 71 2534
Reading: 0 Writing: 1 Waiting: 1
Active connections # 当前活动的连接数
accepts # 当前的总连接数TCP
handled # 成功的连接数TCP
requests # 总的http请求数
Reading # 请求
Writing # 响应
Waiting # 等待的请求数,开启了keepalive
# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接
1.4 nginx访问限制模块
1.我们为什么要对访问进行限制?
在企业中经常会遇到这种情况,服务器流量异常,负载过大等等问题.对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力负载过高从而影响业务.所以我们可能要考虑对同一个ip的连接数,请求数进行限制.
2.ngx_http_limit_conn_module 模块可以根据定义的key来限制每个键值的连接数,比如对同一个IP来源的连接数进行限制.
# limit_conn_module 连接频率限制
# limit_req_module 请求频率限制
了解语法:
# 模块名ngx_http_limit_conn_module
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
"nginx请求限制模块":
# 设置空间的语法
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
limit_req_zone # 设置空间的模块
key # 空间存储的内容
zone # 指定空间
=name # 空间的名字
:size # 空间的大小
rate=rate [sync]; # 读写速率
# 调用的语法
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
limit_req # 调用控件模块
zone=name # 指定空间=空间的名字
[burst=number] # 允许多请求几次
[nodelay | delay=number]; # 延时
实例:
# http标签段定义请求限制,,rate限制速率,限制一秒钟最多一个IP请求
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
}
server {
listen 80;
server_name www.maliao.com;
# 1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端
# limit_req zone=req_zone;
# 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
limit_req zone=req_zone burst=3 nodelay;
location / {
root /tmp/html5-mario;
index index.html;
}
}
# 使用ab工具进行测试
什么是ab工具?
ab是apache自带的压力测试工具,ab是apachebench命令的缩写.
ab不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。
ab是一个httpd自带的很好用的压力测试工具,ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.
可以用来测试apache的负载压力,也可以用来测试nginx,lighthttp,tomcat,IIS等其它Web服务器的压力负载性能.
# 安装ab工具
yum install -y httpd-tools
# 测试
ab -n 20000 -c 20 http://www.autoindex.com/index.html
-n # 请求的次数
-c # 一次请求并发的次数
"nginx连接限制模块":
ngx_http_limit_conn_module
语法了解:
# 设置限制的空间
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
limit_conn_zone # 设置空间的模块
key # 指定空间存储的内容
zone # 指定空间
=name # 空间名字
:size; # 空间的大小
# 调用限制的空间
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
limit_conn # 调用空间的模块
zone # 空间的名字
number; # 指定可以同时连接的次数
实例:
http {
limit_req_zone $remote_addr zone=conn_zone:10m; # 设置一个存储ip地址,空间名字为conn_zone,空间大小为10M的空间
}
server {
listen 80;
server_name www.maliao.com;
limit_coon coon_zone 1; # 调用conn_zone空间,限制每个ip同时只能连接一次.
location / {
root /tmp/html5-mario;
index index.html;
}
}