nginx模块(访问,目录索引,状态监控,访问连接控制)
目录
-
访问输入用户名密码模块
-
ngx_http_auth_basic_module
-
登录IP地址需要输入用户名以及密码
-
1、安装httpd-tools
[root@web01 ~]# yum install httpd-tools -y
2、生成用户名密码文件
[root@web01 ~]# htpasswd -c /etc/nginx/auth junjie
New password:
Re-type new password:
Adding password for user junjie
3、将文件路径加入Nginx配置
[root@web01 ~]# vim /etc/nginx/conf.d/game4.conf
auth_basic "Welcome To Login";
auth_basic_user_file /etc/nginx/auth;
"""
server {
listen 79;
server_name 192.168.1.7;
auth_basic "Welcome To Login";
auth_basic_user_file /etc/nginx/auth;
location / {
root /opt/mairegame;
index index.html;
}
}
server {
listen 81;
server_name www.game1.com;
location / {
root /opt/xiangqigame;
index index.html;
}
}
"""
4、重启Nginx
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx
-
展示目录索引
- ngx_http_autoindex_module
- http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
server {
server_name 192.168.15.7;
listen 80;
autoindex on;
autoindex_exact_size on;
location / {
root /usr/share/nginx/;
index index.html;
}
}
# 默认均为关闭,手动添加
autoindex on;(目录索引)
autoindex_exact_size on;(展示文件大小)
# 产生一个5M大小的文件
[root@web01 nginx]# dd if=/dev/zero of=5M.txt bs=1M count=5
autoindex_localtime on;(将时间改为本地时间,默认东八区时间)
# 默认格式html , autoindex_format html | xml | json | jsonp
autoindex_format json;(将当前页面展示格式改为json格式)
-
Nginx状态监控模块
[root@web01 conf.d]# cat maire.conf
server {
server_name 192.168.15.7;
listen 80;
location / {
stub_status;
}
}
# server 中添加一个独立的location 即可
# Active connections:当前活动客户端连接数,包括waiting连接数
Active connections: 2
# accepts(接收的客户端连接总数) --> 2
# handled(处理的连接总数) --> 2
# requests(客户端请求的总数)-- 5
server accepts handled requests
2 2 5
访问连接控制模块
- ngx_http_limit_conn_module
- ngx_http_limit_req_module
- 两个模块控制速率模块
ngx_http_limit_conn_module(控制连接数)
# 官方网址
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
控制nginx连接
第一次访问网站一个长链接即可完成访问,不停访问连接数不断增加,此时就可以充值连接数
# 官方模块
limit_conn_zone $binary_remote_addr zone=addr:10m
$binary_remote_addr: 把什么选项放进连接池(客户端IP --> $remote_addr)
调用:
limit_conn addr 1;(1代表只能有一个链接)
案例:
[root@web01 conf.d]# pwd
/etc/nginx/conf.d
[root@web01 conf.d]# ls
maire.conf
limit_conn_zone $remote_addr zone=addr:10m;
server {
server_name 192.168.15.7;
listen 80;
autoindex on;
limit_conn addr 1;
location /status {
stub_status;
}
location / {
root /opt/mairegame;
index index.html;
}
}
手动刷新192.168.15.7的速度不够块,无法提现,此处用到ab工具(压测)
1. 安装ab测试命令
yum install httpd-tools -y
2.ab 参数
-n : 总共需要访问指定网站多少次
-c : 每次访问多少个(同时产生指定次数链接)
试试就试试:
[root@web01 mairegame]# ab -n 100000 -c 200 http://192.168.15.7/
...
Complete requests: 执行总次数
Failed requests: 失败次数
ngx_http_limit_req_module(用于限制每个定义的键的请求速率,限制访问量)
# 官方网址
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
# 官方模板
'limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;'
req模块有两个部分:
1.连接池
连接池控制访问数量,需要有一个控制开关
limit_req_zone: 声明一个连接池
$binary_remote_addr: 把什么选项放进连接池(客户端IP --> $remote_addr)
zone=one : 连接池名称
10m : 连接池大小(10兆 )
rate=1r/s:速率(每秒访问一次)
limit_req_zone $remote_addr zone=one:10m rate=1r/s;
声明连接池 变量 名称 连接池的大小 速率
limit_req_zone 的优先级 全局 > http > server > location
调用:
limit_req zone=one burst=5;
burst=5(限定次数不可超过五次)
案例:
[root@web01 conf.d]# cat maire.conf
limit_req_zone $remote_addr zone=one:10m rate=1r/s;
server {
server_name 192.168.15.7;
listen 80;
autoindex on;
location /status {
stub_status;
}
limit_req zone=one burst=5;
location / {
root /opt/mairegame;
index index.html;
}
}
快速刷新由于限制访问将会报503错误,被控制了访问量,不允许访问过多次数
[root@web01 mairegame]# ab -n 100000 -c 200 http://192.168.15.7/
...
Complete requests: 执行总次数
Failed requests: 失败次数
Complete requests: 100000
Failed requests: 99985
2.限制数
调用连接池时会有限制数
ngx_http_limit_conn_module(官方模块)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
ngx_http_limit_req_module (官方模块)
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}