• 10 Nginx模块介绍


    Nginx模块官方文档TP

    目录索引模块ngx_http_autoindex_module

    1)语法

    Syntax:	autoindex on | off;
    Default:	
    autoindex off;
    Context:	http, server, location
    
    #优化部分
    #显示具体大小 off 显示K/M/G单位   on  单位就是 bytes
    Syntax:	autoindex_exact_size on | off;
    Default:	autoindex_exact_size on;
    Context:	http, server, location
    
    #显示文件最后修改时间  如果是 off 需要加8小时
    Syntax:	autoindex_localtime on | off;
    Default:	autoindex_localtime off;
    Context:	http, server, location
    

    2)配置

    #可以用来搭建yum仓库
    [root@web01 conf.d]# cat autoindex.conf 
    server {
    	listen 80;
    	server_name www.yum01.com;
    	location / {
    		root /yumcangku;
    		autoindex on;
    		autoindex_localtime on;
    		autoindex_exact_size on;	
    	}
    }
    

    访问控制模块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)配置

    #要求10.0.0.1可以访问我的/download 目录,其他网址不允许
    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            allow 10.0.0.1;
            deny all;
        }
    }
    
    #要求10.0.0.1不可以访问我的/download 目录,其他网址允许
    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            deny 10.0.0.1;
            allow all;
        }
    }
    
    #要求10.0.0.0网段可以访问我的/download 目录,其他网址不允许
    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            allow 10.0.0.0/24;
            deny all;
        }
    }
    

    访问认证模块 ngx_http_auth_basic_module

    1)语法

    #注释(没什么卵用)
    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)配置密码

    #创建密码文件需要 htpasswd
    [root@web02 conf.d]# htpasswd -c /etc/nginx/conf.d/auth_basic linux
    New password: 
    Re-type new password: 
    Adding password for user linux
    [root@web02 conf.d]#
    
    #或者使用
    [root@web02 conf.d]# htpasswd -c -b /etc/nginx/conf.d/auth_basic linux linux
    Adding password for user linux
    
    #密码文件内容
    [root@web02 conf.d]# cat auth_basic 
    linux:$apr1$LHT3VFfz$0jtY0cGX5gkeSFI84xDvt0
    
    #注意:生成多对密码时,不使用-c参数
    [root@web02 conf.d]# htpasswd /etc/nginx/conf.d/auth_basic lhd
    New password: 
    Re-type new password: 
    Adding password for user lhd
    
    [root@web02 conf.d]# cat auth_basic 
    lhd:$apr1$GuCSoYQe$nsQhhAiPBrOoa0J3zD/s9.
    linux:$apr1$w2AJGlBm$5yatp0GIlwipoYbdE/A2a/
    

    3)配置

    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            allow 10.0.0.0/24;
            deny all;
            #不配不行
            auth_basic "please input password!";
            auth_basic_user_file /etc/nginx/conf.d/auth_basic;
        }
    }
    

    nginx状态模块 ngx_http_stub_status_module

    1)语法

    Syntax:	stub_status;
    Default:	—
    Context:	server, location
    

    2)配置

    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            allow 10.0.0.0/24;
            deny all;
            auth_basic "please input password!";
            auth_basic_user_file /etc/nginx/conf.d/auth_basic;
        }
    
        location /status {
            stub_status;
        }
    }
    
    

    3)nginx 七种状态

    Active connections: 2 
    server accepts handled requests
     		 4 		 4 		56 
    Reading: 0 Writing: 1 Waiting: 1 
    
    Active connections:		 # 活跃的连接数
    accepts					# TCP连接总数
    handle					# 成功的TCP连接数
    requests				# 请求数
    
    Reading					# 读取请求头部
    Writing					# 放回给客户端的头部
    Waiting					# 等待的请求数
    
    #注意:一次tcp连接,可以发起多次请求;
    keepalive_timeout  0;   #类似于关闭长连接
    keepalive_timeout  65;	#最长65秒没有活动则断开连接
    

    连接限制模块 ngx_http_limit_conn_module

    1)语法

    #设置限制的空间(连接数)
    		#调用模块        空间里的内容  空间=空间名字:空间大小
    Syntax:	limit_conn_zone      key       zone=name:size;
    Default:	—
    Context:	http
    
    #调用上面的空间
    Syntax:	limit_conn zone number;
    Default:	—
    Context:	http, server, location
    

    2)配置

    http {
    	... ...
    	limit_conn_zone $remote_addr zone=conn_zone:10m;
    	... ...
    }
    
    server {
    	... ...
    	#设置共享内存区域和设置最大允许连接数。当超过此限制时,服务器将返回 错误 以回复请求。
    	limit_coon conn_zone 1;
    }
    

    请求限制模块 ngx_http_limit_req_module

    1)语法

    #设置限制请求的空间(频率)
    		#模块         空间里保存的内容  空间=空间名称:大小	速率 1r/s
    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
    
    nodely	#延时请求
    

    2)配置

    limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s;
    
    server {
        listen 80;
        server_name www.host1.com;
        charset 'utf-8';
    
        location / {
            root /codehost1;
            index index.html;
            limit_req zone=req_zone;
            limit_req_status 412;
        }
    
        location /download {
            root /codehost1;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            allow 10.0.0.0/24;
            deny all;
            auth_basic "please input password!";
            auth_basic_user_file /etc/nginx/conf.d/auth_basic;
        }
    
        location /status {
            stub_status;
        }
    }
    

    3)测试请求限制

    #ab工具
    [root@web02 conf.d]# ab -n 20 -c 2 http://www.host1.com/
    Server Software:        nginx/1.16.1
    Server Hostname:        www.host1.com
    Server Port:            80
    
    Document Path:          /
    Document Length:        581 bytes
    
    Concurrency Level:      2
    Time taken for tests:   0.007 seconds
    Complete requests:      20
    Failed requests:        19
       (Connect: 0, Receive: 0, Length: 19, Exceptions: 0)
    Write errors:           0
    Non-2xx responses:      19
    Total transferred:      8125 bytes
    HTML transferred:       4324 bytes
    Requests per second:    3056.70 [#/sec] (mean)
    Time per request:       0.654 [ms] (mean)
    Time per request:       0.327 [ms] (mean, across all concurrent requests)
    Transfer rate:          1212.68 [Kbytes/sec] received
    
    [root@web02 conf.d]# 
    

    Nginx location

    使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置, 多个location的优先级该如何区分
    

    1.语法

    Syntax:	location [ = | ~ | ~* | ^~ | / ] uri { ... }
    		location @name { ... }
    Default:	—
    Context:	server, location
    

    2.location匹配符

    匹配符 匹配规则 优先级
    = 精确匹配 1
    ^~ 以某个字符串开头 2
    ~ 区分大小写的正则匹配 3
    ~* 不区分大小写的正则匹配 4
    / 通用匹配,任何请求都会匹配到 5

    3.验证location匹配顺序

    [root@web02 conf.d]# vim testlocation.conf
    server {
        listen 80;
        server_name www.linux.com;
        #location / {
        #    default_type text/html;
        #    return 200 "location /";
        #}
    
        location =/ {
            default_type text/html;
            return 200 "location =/";
        }
    
       location ~ / {
            default_type text/html;
            return 200 "location ~/";
        }
    
       location ^~ / {
          default_type text/html;
          return 200 "location ^~";
        }
    }
    
    

    4.验证访问文件

    [root@web01 conf.d]# cat testserver.conf 
    server {
        listen 80;
        server_name www.server.com;
    	location / {
        	root /code;
    	}
    	 
    	location ~ .php$ {
    	    root /php;
    	}
    	 
    	location ~ .jsp$ {
    	    root /jsp;
    	}
    	 
    	location ~* .(jpg|gif|png|js|css)$ {
    	    root /pic;
    	}
    	 
    	location ~* .(sql|bak|tgz|tar.gz|git)$ {
    	    root /package;
    	}      
    }
    
    www.server.com/1.PHP
    www.server.com/2.JPG
    www.server.com/3.jsp
    www.server.com/4.tGz
    www.server.com/5.Gif
    
  • 相关阅读:
    XML Schema (1)
    xml
    java输入输出流(内容练习)
    Java中I/O的分析
    java File类
    java中Map的用法(HaspMap用法)
    Git
    oracle安装分析
    博客第一天
    正则化 L1 L2
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14710755.html
Copyright © 2020-2023  润新知