zoukankan      html  css  js  c++  java
  • nginx內建模块使用

    nginx內建模块使用

    标签(空格分隔): nginx


    © 版权声明:本文为博主原创文章,转载请注明出处

    本文内容仅为个人理解,不保证完全正确

    1. 內建模块的引入

    安装nginx,只安装了核心模块,其他非核心模块都没有引入。因此当需要使用某个內建模块时需重新进行配置

    1.1 查看安装信息

    nginx -V # 查看安装信息,需要nginx配置到环境变量中,或者需要指定路径/home/*/nginx/sbin/nginx -
    

    1.2 重新指定配置信息

    假设以添加http_stub_status_module模块为例

    • nginx -V查看以前的配置信息

    • 将新模块的信息追加到后面,然后重新配置。注意是追加不是覆盖。比如原本的配置信息为./configure --prefix=/home/nginx/nginx,那么添加http_stub_status_module后的配置信息为./configure --prefix=/home/nginx/nginx --with-http_stub_status_module

    • 执行make命令,不能执行make install命令,否则会重新安装的

    • 备份sbin目录下的nginx文件mv ngnix ngnix.bak

    • 将解压目录下objs目录下重新生成的nginx文件复制到安装目录的sbin目录下cp /home/nginx/nginx-1.12.2/objs/nginx /home/nginx/nginx/sbin

    • 重新加载nginxnginx -s reload -c /home/nginx/nginx/conf/nginx.conf。有时重新加载nginx不能加载新模块,此时可以用kill关闭nginx,然后重启启动即可

    cd /home/nginx/nginx-1.12.2/ # 切换到解压后的nginx目录下
    
    ./configure --prefix=/home/nginx/nginx --with-http_stub_status_module # 重新指定配置信息
    
    make # 重新编译
    
    cp /home/nginx/nginx/sbin/nginx /home/nginx/nginx/sbin/nginx.bak # 备份
    
    cp /home/nginx/nginx-1.12.2/objs/nginx /home/nginx/nginx/sbin # 复制
    
    nginx -s reload -c /home/nginx/nginx/conf/nginx.conf # 重新加载nginx
    

    2. 內建模块的使用

    2.1 http_stub_status_module

    作用:展示nginx的一些状态信息
    配置

    Syntax: stub_status;
    Default: -;
    Context: server、location

    样例

    location /mystatus {
    stub_status; # 查看nginx的一些状态信息
    }

    说明: 配置完成后,重新加载nginx,然后访问根据配置的名称进行访问即可查看nginx的状态信息
    访问方式:http://nginx_ip:nginx_port/mystatus
    字段说明

    Active connections: 2
    server accepts handled requests
    5 5 23
    Reading: 0 Writing: 1 Waiting: 1

    其中Active connections:表示活跃的连接数
    accepts:表示接收的握手的数量
    handled:表示处理的数量。handled和accepts需要相等,表示没有丢失连接
    requests:表示总的请求数
    Reading:读取客户端的连接数
    Writing:响应数据到客户端的数量
    Waiting:开启keep-alive的情况下,等于Active connections-(Reading + Writing),表示nginx已经处理完正在等待下一次请求的驻留连接

    2.2 http_random_index_module

    作用:该模块的作用是随机显示主页
    配置

    Syntax: random_index on|off;
    Default: random_index off;
    Context: location

    样例

    location / {

            #root   html;
            #index  index.html index.htm;
            root /home/nginx/Code; # 主页目录
            random_index on; # 在主页目录下随机选择一个主页
        }
    

    说明:配置完成后,重新加载nginx,然后多次访问主页,此时nginx会自动从主页目录下随机选择一个html加载,但是不会加载隐藏文件
    访问方式:http://nginx_ip:nginx_port/

    2.3 http_sub_module

    作用:将返回的内容进行HTTP内容替换
    配置

    1. Syntax: sub_filter string replacement; 主要用于替换字符串
      Default: -;
      Context: http,server,location
    2. Syntax: sub_filter_last_modified on|off; 校验服务端的内容是否有变更,有就返回最新内容,主要用于缓存
      Default: sub_filter_last_modified off;
      Context: http,server,location
    3. Syntax: sub_filter_once on|off; 是否只替换第一个,默认是on;off则替换所有的
      Default: sub_filter_once on;
      Context: http,server,location

    样例

    location / {
    root /home/nginx/Code;
    index index.html;
    sub_filter 'imooc' 'IMOOC';
    sub_filter_once off;
    }

    说明:配置完成后,重新加载nginx,然后访问主页,此时会替换主页中所有的imooc为IMOOC
    访问方式:http://nginx_ip:nginx_port/

    2.4 limit_conn_module

    作用:连接频率限制
    配置

    1. Syntax: limit_conn_zone key zone=name:size存储连接状态,key存储键值,name唯一标识,size存储大小
      Default: -;
      Context: http
    2. Syntax: limit_conn zone number; zone对应limit_conn_zone中的name,number并发限制数
      Default: -;
      Context: http,server,location

    样例

    http {
    limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
    server {
    location / {
    root /home/nginx/Code;
    index index.html;
    limit_conn conn_zone 1;
    }
    }
    }

    说明:配置完成后,重新加载nginx,然后使用ab进行测试。此时一个ip只能同一时刻只能建立一个连接

    2.5 limit_req_module

    作用:请求频率限制
    配置

    1. Syntax: limit_req_zone key zone=name:size rate=rate; 存储请求状态,key存储键值,name唯一标识,size存储大小,rate请求速率限制(条/s)
      Default: -;
      Context: http
    2. Syntax: limit_req zone=name [burst=number] [nodelay]; name对应limit_req_zone中的name,burst表示延迟请求,number表示个数,即有number个请求会延迟到下一秒处理,nodelay表示剩余的都是立刻处理
      Default: —;
      Context: http,server,location

    样例

    http {
    limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
    server {
    location / {
    root /home/nginx/Code;
    index index.html;

            #limit_req zone=req_zone;
            #limit_req zone=req_zone burst=3 nodelay;
            limit_req zone=req_zone burst=3;
        }
    }
    

    }

    说明:配置完成后,重新加载nginx,然后使用ab进行压力测试
    配置说明

    limit_req zone=req_zone; 表明严格按照rate设置的速率处理请求,多余的请求直接舍弃
    limit_req zone=req_zone burst=3 nodelay; 表明按照rate设置的速率处理请求,同时设置一个大小为3的缓存队列,当请求到来时可以爆发出一个峰值处理能力,处理缓存中的请求,其他的请求舍弃。
    limit_req zone=req_zone burst=3; 表明按照rate设置的速率处理请求,同时设置一个大小为3的缓存队列,在缓存队列中的请求会等待慢慢处理,超过rate处理能力和缓存队列长度的请求直接舍弃。有延迟

    参考http://blog.csdn.net/hellow__world/article/details/78658041

    2.6 http_access_module

    作用:限制某些IP地址的客户端访问
    配置

    1. Syntax: allow address|CIDR|unix:|all; address:IP地址 CIDR:网段 unix:主要用于socket消息 all:允许所有的
      Default: -;
      Context: http,server,location,limit_except
    2. Syntax: deny address|CIDR|unix:|all; address:IP地址 CIDR:网段 unix:主要用于socket消息 all:阻止所有的
      Default: -;
      Context: http,server,location,limit_except

    样例

    location ~ ^/index {
    root /home/nginx/Code;
    deny 192.168.56.1; # 阻止192.168.56.1的IP访问
    allow all; # 允许其他所有的IP访问
    index index.html index.htm;
    }
    location ~ ^/index {
    root /home/nginx/Code;
    allow 192.168.56.1; # 只允许192.168.56.1的IP访问
    deny all; # 阻止其他所有的IP访问
    index index.html index.htm;
    }

    说明:配置完成后,重新加载nginx,使用不同的IP进行访问
    局限性:如果是通过代理访问,这样IP控制就会失效。
    解决方案

    方法一:采用别的HTTP头信息控制访问,如HTTP_X_FORWARD_FOR。(HTTP_X_FORWARD_FOR只是一个规范,可能没有,也可能被修改)
    方法二:采用geo模块控制
    方法三:通过HTTP自定义变量传递

    2.7 http_auth_basic_module

    作用:基本身份验证
    配置

    1. Syntax: auth_basic string | off # string:验证失败时提示的信息
      Default: auth_basic off;
      Context: http,server,location,limit_except
    2. Syntax: auth_basic_user_file file; # file:验证文件路径
      Default: -;
      Context: http,server,location,limit_except

    样例

    location / {
    root /home/nginx/Code;
    index index.html index.htm;
    auth_basic "Auth access test!input your password!";
    auth_basic_user_file /home/nginx/nginx/conf/conf.d/auth/auth_conf;
    }

    说明:auth_conf文件使用htpasswd生成,若未安装,可先使用yum -y install httpd-tools进行安装,然后用htpasswd -c ./auth_conf username按提示生成文件,重新加载nginx
    局限性:用户信息依赖文件方式、操作管理机械,效率低下
    解决方案

    方法一:Nginx结合LUA实现高效验证
    方法二:Nginx和LDAP打通,利用nginx-auth-ldap模块


    更好的MarkDown体验:https://www.zybuluo.com/chy282/note/1042841

  • 相关阅读:
    挑战程序设计竞赛 第2章习题 poj 1017 Packets 贪心模拟
    挑战程序设计竞赛 2章习题 poj 2376 Cleaning Shifts
    Leetcode 27. 移除元素 双指针
    Leetcode 26. 删除有序数组中的重复项 双指针
    Leetcode 31. 下一个排列
    webserver 发布问题
    [转]机器学习中的各种距离
    VUE3 + TYPESCRIPT 开发实践总结
    我和ABP vNext 的故事
    ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/8425657.html
Copyright © 2011-2022 走看看