zoukankan      html  css  js  c++  java
  • ⑤nginx 常用模块

    目录索引 autoindex

    Syntax: autoindex on | off;
    Default:    
    autoindex off;
    Context:    http, server, location
    
    //autoindex常用参数
    autoindex_exact_size off;
    默认为on, 显示出文件的确切大小,单位是bytes。
    修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。
    
    autoindex_localtime on;
    默认为off,显示的文件时间为GMT时间。
    修改为on, 显示的文件时间为文件的服务器时间。
    
    charset utf-8,gbk;
    默认中文目录乱码,添加上解决乱码。
    

    配置目录浏览功能

    server {
            listen       80;
            server_name  software.yangyijing.cn;
            autoindex_exact_size off;
            autoindex_localtime on;
            autoindex on;
            charset    UTF-8;
            root   /data/software;
      }
    }
    

    Nginx状态监控

    --with-http_stub_status_module记录Nginx客户端基本访问状态信息

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

    具体配置如下:

     location /mystatus {
        stub_status on;
        access_log off;
    }
    
    //Nginx_status概述
    Active connections:2    //Nginx当前活跃连接数
    server accepts handled requests
    16     16     19
    server表示Nginx启动到现在共处理了16个连接。
    accepts表示Nginx启动到现在共成功创建16次握手。
    请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
    handled requests,表示总共处理了19次请求。
    Reading     Nginx读取到客户端的 Header 信息数。
    Writing     Nginx返回给客户端的 Header 信息数。
    Waiting    Nginx开启keep-alive长连接情况下, 既没有读也没有写, 建立连接情况
    

    Nginx访问控制

    基于IP的访问控制 http_access_module
    基于用户登陆认证 http_auth_basic_module

    基于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, 其他全部允许

    location ~ ^/1.html {
        root /usr/share/nginx/html;
        index index.html;
        deny 192.168.56.1;
        allow all;
    }
    

    //只允许某一个网段访问,其它全部拒绝

    location / {
        root   html;
        index  index.php index.html index.htm;
        allow   192.168.56.0/24;
        deny    all;
    }
    ```
    http_access_module局限性
    
    下图是使用http_x_forwarded_for记录真实客户端IP地址以及代理服务器IP
    
    解决方式
    1.采用HTTP头信息控制访问, 代理以及web服务开启http_x_forwarded_for
    2.结合geo模块作
    3.通过HTTP自动以变量传递
    
    基于用户登陆认证  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
    ```
    
    //需要安装依赖组件
    ```
    [root@xuliangwei ~]# yum install httpd-tools
    [root@xuliangwei ~]# htpasswd -c /etc/nginx/auth_conf xuliangwei
    ```
    //可在http,server,location下添加如下信息
    ```
    auth_basic "Auth access Blog Input your Passwd!";
    auth_basic_user_file /etc/nginx/auth_conf;
    ```
    用户认证局限性
    1.用户信息依赖文件方式
    2.操作管理机械,效率低下
    
    解决办法
    1.Nginx结合LUA实现高效验证
    2.Nginx结合LDAP, 利用nginx-auth-ldap模块
    ####Nginx访问限制
    
    连接频率限制 limit_conn_module
    请求频率限制 limit_req_module
    
    http协议的连接与请求
    HTTP是建立在TCP, 在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上在HTTP请求。
    
    HTTP请求建立在一次TCP连接基础上
    一次TCP请求至少产生一次HTTP请求
    HTTP协议版本 	连接关系
    HTTP1.0 	TCP不能复用
    HTTP1.1 	顺序性TCP复用
    HTTP2.0 	多路复用TCP复用
    
    Nginx连接限制配置:
    ```
    //全局定义连接限制
    Syntax:  limit_conn_zone key zone=name:size;
    Default: —
    Context: http
    //引用连接限制
    Syntax: limit_conn zone number;
    Default: —
    Context: http, server, location
    ```
    
    //具体配置如下:
    http {
    //http段配置连接限制, 同一时刻只允许一个客户端IP连接
    ```
    limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
        ...
        server {
        ...  
    
            location / {
            //同一时刻只允许一个客户端IP连接
                limit_conn conn_zone 1;
            }
    ```
    
    //压力测试
    yum install -y httpd-tools
    ab -n 50 -c 20  http://127.0.0.1/index.html
    
    Nginx请求限制配置:
    ```
    //全局定义请求限制
    Syntax: 	limit_req_zone key zone=name:size rate=rate [sync];
    Default: 	—
    Context: 	http
    
    ```
    示例:
    ```
    //具体配置如下:
    http {
    //http段配置请求限制, rate限制速率,限制一秒钟最多一个IP请求
     
        ...
        server {
        ...  
    
            location / {
            //1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端
                limit_req zone=req_zone;
            //请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
                #limit_req zone=req_zone burst=3 nodelay;
                #limit_req_status 412;
                #error_page 412 /err.html; 
            }
    ```
    
    //压力测试
    yum install -y httpd-tools
    ab -n 50 -c 20  http://127.0.0.1/index.html
    
    连接限制没有请求限制有效?
    
        我们前面说过, 多个请求可以建立在一次的TCP连接之上, 那么我们对请求的精度限制,当然比对一个连接的限制会更加的有效。
    
        因为同一时刻只允许一个连接请求进入。
        但是同一时刻多个请求可以通过一个连接进入。
        所以请求限制才是比较优的解决方案。
  • 相关阅读:
    java中变量命名和引用变量的一个坑
    java(2)之前往对象村
    java的print,printf,println以及输入
    HTML学习开篇
    今后的学习路径
    offline .net3.5
    java
    两个经典的Oracle触发器示例(轉)
    listview1
    Delphi连接Oracle控件ODAC的安装及使用(轉載)
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14637469.html
Copyright © 2011-2022 走看看