nginx二:常用功能(一):目录索引、监控状态、访问控制、访问限制

1.索引目录

类似于ftp服务器,共享文件目录的作用。如图:

server {
        listen 80;
        server_name www.myweb.com;

        location /download {
                root /worldcupmf;  # 网站的根目录
                autoindex on;  # 开启索引目录功能
                charset utf-8;  # 设置编码
                autoindex_localtime on;  # 设置时间
                autoindex_exact_size off;  # 关闭bytes显示大小,启用kb,Mb来显示文件或文件夹大小
        }

} 

重载配置:nginx -s reload或者systemctl reload nginx

修改hosts文件:192.168.1.15 www.myweb.com 

排错,查看日志:/var/log/nginx/error.log

 

2.状态监控 

nginx_http_stub_status_module:用于展示nginx连接状态信息,需要 --with-http_stub_status_module模块支持。

a.查看是否安装此模块:

nginx -V &> 1.txt
--with-http_stub_status_module

 

b.查看文档:http://nginx.org/en/docs/,搜索status模块

配置:

location /nginx_status {
    stub_status;
    access_log off;  #off,将会关闭访问记录
}

 

结果:

Active connections: 2   # 当前活动的连接数
server accepts handled requests
 7 7 15  #accepts:当前的总连接数TCP ,handled:成功的连接数TCP,requests:总的http请求数
Reading: 0 Writing: 1 Waiting: 1 

测试,观察长连接和短连接的区别:

将keepalive_timeout 设置为0,刷新状态页面,结果:当使用短连接的时侯,每刷新一次accepts和handled都会刷新。

将keepalive_timeout 设置为65,刷新状态页面,结果:当使用长连接的时侯,每刷新一次,accepts和handled要等65秒,TCP连接超时后,才会重新连接

 

3.访问控制

基于IP的访问控制:http_access_modul,比如后台控制或vpn

基于用户登陆认证的访问控制:http_auth_basic_module,比如前台控制

查看文档:http://nginx.org/en/docs/,搜索access模块

示例1:基于IP的访问控制

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

 

从上往下,依次匹配,满足条件就停止----因此越具体的写到越上面。匹配方式同apache的语法不同。

如果拒绝的多-----先写允许,最后默认拒绝所有

如果允许的多----先写拒绝,最后默认允许所有

语法:deny或allow后面,可以跟address,CIDR,unix正则,all

位置:通常写在location中

示例2:基于用户认证的访问控制

配置语法:auth_basic string | off,默认值是off

配置位置:通常用于location或server配置

用户名和密码记录的配置文件:

语法:auth_basic_user_file file

位置:通常用于location或server配置

依赖组件:yum install httpd-tools

httpd-tools工具,用于验证和生成密码的工具

htpasswd -b -c /etc/nginx/.auth_conf myuser mypassword

 

以上中的.auth_conf,是自定义的,用于存储用户名和密码的文件。

在nginx配置示例:

server {
        listen 80;
        server_name www.myweb.com;
        location / {
                root /worldcupmf;
                index index.html;
                auth_basic "please input your password!";
                auth_basic_user_file /etc/nginx/.auth.conf
        }

}

  

4.访问限制

HTTP请求建立在TCP连接的基础之上, 一次TCP连接至少产生一次HTTP请求

a.连接限制语法:

  • limit_conn_zone key zone=name:size;
  • 位置:http
  • limit_conn zone=name number
  • 位置:http,server,location

连接限制示例:

http {
# 在http段配置连接限制zone的定义,示例:针对key(客户端连接:$binary_remote_addr)进行限制,存储空间最大10M
limit_conn_zone $binary_remote_addr zone=my_conn_zone:10m;
    server {
        # 同一时刻,只允许一个客户端IP连接
        limit_conn zone=my_conn_zone 1;

 主机变量:$binary_remote_addr长度固定为4个字节(一个IP地址=32bit=4bytes),$remote_addr长度为7~15个字节

10M=10*1024k=10*1024*1024Bytes

使用ab进行压力测试:yum install ab

ab -n 50 -c 20 http://127.0.0.1/index.html

b.请求限制语法:

  • limit_req_zone key zone=name:size rate=rate;
  • 位置:http
  • limit_req zone=name burst=5
  • 位置:http,server,location

请求限制示例:

http {
# 在http段配置连接限制zone的定义,示例:针对key(客户端连接:$binary_remote_addr)进行限制,每秒钟1次最多一个IP请求
limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s;
    server {
        #1秒钟只接收一个请求,其余请求拒绝处理,并返回错误码给客户端
        limit_conn zone=my_req_zone;
       #1秒钟只收到一个请求,剩下的将被延迟处理,请求数超过burst定义的数量,多余的请求nodelay返回503
       #limit_req zone=my_req_zone burst=3 nodelay;

 

压测:ab -n 50 -c 20 http://192.168.1.10/download

 

posted on 2014-08-25 11:18  myworldworld  阅读(203)  评论(0)    收藏  举报

导航