美文网首页
154Nginx 运维基础入门--Nginx配置实战:流量及并发

154Nginx 运维基础入门--Nginx配置实战:流量及并发

作者: Jachin111 | 来源:发表于2021-09-19 17:43 被阅读0次

    文件获取
    在这之前,我们需要先下载一个 mp4 文件,供后面实验测试使用哦。
    先建立一个 Documents 目录

    mkdir Documents && cd Documents
    

    再使用命令:

    wget https://labfile.oss.aliyuncs.com/courses/95/seven.tar.gz
    tar xzf seven.tar.gz
    
    image.png

    实现流量限制具体配置

    编译 Nginx
    首先要清楚,我们的配置是基于 ngx_http_core_module 模块的。要简单完成流量限制,我们必须做一点前期准备。
    我们刚才已经在下载测试使用包,现在要做的,就是安装 nginx,上几章的讲解已经很详细了,这里我们选择源码安装。(前面的实验中我们已经编译安装了)

    cd /home/shiyanlou/
    wget https://labfile.oss.aliyuncs.com/nginx-1.7.9.tar.gz
    

    接下来就是解压,编译,安装,前两章着重讲过,这里不再赘述。
    下面我们就修改配置文件,前几章我们讲过对于 Nginx 来说,最重要的莫过于他自己的配置文件 nginx.conf。文件路径为/usr/local/nginx/conf/nginx.conf,我们需要在 http 的 server 中加一个 location,就好比之前我们做的简单的 echo 模块,格式为:

    location /刚下好的测试文件夹/ {
        root /刚才下载测试文件的目录/;
        ...
        ...
        ...
    }
    

    相关指令
    接下来就是调用命令实现流量限制。nginx 的模块中早就写好了对应的命令,我们只需要调用就好。
    实现流量限制由两个指令 limit_rate 和 limit_rate_after 共同完成:
    (1)limit_rate 指令
    语法:

    limit_rate rate;
    

    默认值:limit_rate 0;
    作用域:http, server, location, if in location

    命令概述:
    限制向客户端传送响应的速率限制。
    参数 rate 的单位是字节/秒,设置为 0 将关闭限速。
    nginx 按连接限速,所以如果某个客户端同时开启了两个连接,那么客户端的整体速率是这条指令设置值的 2 倍。
    (2)limit_rate_after 指令
    语法:

    limit_rate_after size;
    

    默认值:limit_rate_after 0;
    作用域:http, server, location, if in location

    命令概述:
    设置不限速传输的响应大小。当传输量大于此值时,超出部分将限速传送。

    要是想了解更多,这里有更加详细的命令信息: http://wiki.nginx.org/HttpCoreModule#limit_rate

    具体配置
    讲了要使用的指令,我们接下来就实战配置。
    这是实验的具体配置(传输量限制为 3m,速率限制为 20k/s):

    location /seven/{
                    root /home/shiyanlou/Documents;
                    limit_rate_after 3m;
                    limit_rate 20k;
    }
    

    代码截图如下:


    image.png

    配置完以后记得重新启动 Nginx(注意这是编译安装的)

    cd /home/shiyanlou/nginx-1.7.9/objs
    sudo ./nginx
    

    配置之前与配置之后的测试
    接下来就是测试

    cd /home/shiyanlou/
    wget http://本机地址/seven/seven.mp4
    

    本机地址用 ifconfig 来查看

    修改配置之前,速率没有限制:


    image.png

    修改配置之后,可见由于传输量大于 3M,超出部分的传输速率已经被限制在 20k/s:


    image.png
    也许你已经发现配置之后刚开始的一段时间内传输速度很高,因为,传输量大于设定值的部分才会受到限制。这就说明,我们两个命令都发挥了作用,这也就完成了我们第一个实战。

    实现并发连接数限制的具体配置

    相关指令
    这个的配置是基于 ngx_http_limit_zone_module 模块的,要简单完成并发限制,我们要涉及到 limit_conn_zone 和 limit_conn 这两个指令:
    (1)limit_conn_zone 指令
    语法: limit_conn_zone zone_name $variable the_size
    默认值: no
    作用域: http
    本指令定义了一个数据区,里面记录会话状态信息。 variable 定义判断会话的变量;the_size 定义记录区的总容量。
    (2)limit_conn 指令
    语法: limit_conn zone_name the_size
    默认值: no
    作用域: http,server,location

    指令概述:
    指定一个会话最大的并发连接数。 当超过指定的最发并发连接数时,服务器将返回 "Service unavailable" (503)。
    配置示例:

    http {
        limit_conn_zone  $binary_remote_addr  zone=one:10m;
        ...
        server {
            ...
            location /seven/ {
                limit_conn   one  1;
                .....
            }
        }
        ...
    }
    ...
    

    limit_conn_zone binary_remote_addr zone=one:10m; 定义一个叫 one 的记录区,总容量为 10M。 以变量binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。

    你可以注意到,在这里使用的是 binary_remote_addr 而不是remote_addr。remote_addr 的长度为 7 至 15 bytes,会话信息的长度为 32 或 64 bytes。 而binary_remote_addr 的长度为 4 bytes,会话信息的长度为 32 bytes。
    当 zone 的大小为 1M 的时候,大约可以记录 32000 个会话信息(一个会话占用 32 bytes)。

    limit_conn one 1;
    限制 /seven/ 目录下,一个会话只能进行一个连接。 简单点,就是限制 /seven/ 目录下,一个 IP 只能发起一个连接,多过一个,一律 503。

    由于环境的原因这里没有办法测试只是让大家了解,限制并发连接数 Nginx 的对应模块的配置,如果大家有需要,可以进一步参照 http://wiki.nginx.org/HttpLimitZoneModule 这里有更详细的讲解。

    实验总结

    如果提示 404 not found 怎么处理
    404 not found 表明文件没有找到,你看看 seven.mp4 是放在哪的
    如果你的配置文件是这样写的话

            location /seven/{
                root /home/shiyanlou/Documents;
                limit_rate_after 3m;
                limit_rate 10k;
            }
    

    wget 是这样

    wget http://localhost/seven/seven.mp4
    

    那么当你访问seven/,nginx以/home/shiyanlou/Documents作为根目录去寻找seven/seven.mp4
    所以 mp4 文件应该存放在 /home/shiyanlou/Documents/seven/seven.mp4
    在这一节中,我们了解到要想实现流量及并发连接数限制,我们只需要清楚必须对应哪些模块,添加哪些命令,而这些命令早就已经写好。我们只需调用,如果有必要再深究这些命令的的实现方法。
    练习
    按照所给步骤实现流量限制。

    相关文章

      网友评论

          本文标题:154Nginx 运维基础入门--Nginx配置实战:流量及并发

          本文链接:https://www.haomeiwen.com/subject/mahpgltx.html