Nginx服务器的功能模块

Nginx和Apache的区别优点

1、Nginx与Apache比较的优点

对于这个问题,并不能说哪一个较好,本身他们都有优缺点,例如:Apache提供了几百个模块,模块就意味着功能,但作为一个Apache服务器最多只有2000多的并发量,Nginx提供的模块也就几十个,但他却可以提供20000的并放量。Apache的功能多,而Nginx的功能少,但有一句话可以很好的说明:
Apache就像Office一样,他有几十万的选项,但你只需要那么六个功能能选
项,Nginx只做了这六个功能,但是他做的这六件事中基本是Apache做的50倍。
                                                                       --Chris Lea,ChrisLea.com

2、从Nginx接受客户端请求处理的角度,他与Apache的不同

Nginx采用的是事件驱动结构,它使用异步请求套接字来接受请求,是一种非阻塞结构,不适用单独的县城处理,目的是为了减少内存和CPU的开销。而Apache采用的同步套接字、线程和进程,每一个请求都是一个单独的进程和线城来进行处理。
 

Nginx服务器的功能模块

1、限制流量 
对于提供下载的网站来说,肯定是要进行流量现值的,在Nginx中我们完全可以做到限制流量,由Core模块提供了limit_rate、limit_rate_after指令。

(a)指令limit_rate 
指令名称:limit_rate 
使用环境:http、server、location、if in location 
默认值:no

该指令用于指定向客户端传输数据的速度,速度的单位是每秒传输的字节数。该指令只是针对一个连接的设定,也就是说,如果有两个连接同时,那么他们的速度将会是该指令设置的两倍,就像我们的宽带带宽是一样的。

如果需要在server级别对客户端连接进行限制,对于这种情况–这个指令可能并不适合,但是可设置$limit_rate变量,为该变量传递相应的值来实现,例如:
 

server{
    if($slow){
        set $limit_rate 4k;
    }
}

b)指令limit_rate_after 
指令名称:limit_rate_after 
使用环境:http、server、location、if in location中的if字段 
默认值:limit_rate_after 1m

扫描二维码关注公众号,回复: 8839746 查看本文章

该指令是“在。。。后在限制速度为。。。”,意思就是以最大的速度下载time时间后,在进行相应的操作,但在实际的使用中,limit_rate_after的参数是一个下载字节量的大小值,而不是时间值,例如:limit_rate_after 3m是指以最大的速度下载3MB之后。

例如:

location /download{
    limit_rate_after 3m;
    limit_rate 512k;
}

意思为:当一个客户端连接后,将以最快的速度下载3MB之后,然后在以512k的速度进行下载。

2、限制用户并发连接数 
可以通过limit_zone模块来实现限制用户的连接数目,既限制同一个用户IP地址的并发连接数。 
该模块提供两个命令:limit_zone和limit_conn,其中limit_zone只能在http区段,limit_conn可以使用在http、server、location区段。
例如:

http{
    limit_zone  one  $binary_remote_addr  10m;
    server{
        location /download/{
            limit_conn one 1;
        }
    }
}

(a)指令limit_zone 
指令名称:limit_zone 
语法:limit_zone zone_name $variable memory_max_size 
使用环境:http 
默认值:no

该指令用于定义一个zone,该zone将会被用于存储会话的状态。能够存储的会话数量是由分配交付的变量和memory_max_size的大小决定的。 
例如: 
limit_zone one $binary_remote_addr 10m; 
客户端的IP地址将用作会话,注意:这里使用的是binaryremoteaddr而不是
remote_addr,这是因为remote_addr的长度为7-15个字节,绘画信息的长度为32字节。当设置1MB的一个zone时,如果使用binary_remote_addr方式,该zone将会存放32000个会话。

(b)指令limit_conn 
指令名称:limit_conn 
语法:limit_conn zone_name max_clients_per_ip 
使用环境:http、server、location 
默认值:no

该指令用于为一个会话设定最大的并发连接数。如果并发起请求数超过这个限制,那么将会出现503错误。
 

limit_zone  one  $binary_remote_addr  10m;

server{
    location /download/{
        limit_conn one 1;
    }
}

这个设置将会使得俩个与同一个ip的并发连接数不能超过1个。

b)指令limit_conn_log_level 
指令名称:limit_conn_log_level 
语法:limit_conn_log_level log_level info | notice | warn |error 
使用环境:http、server、location 
默认值:error 
该指令用于设置错误级别,当连接达到限制之后,将会产生错误日志。
 

综合实例:

worker_progresses  4;

event{
    worker_connection 10240;
}

http{
    include  mime.types;
    default_type  application/octet-stream;
    sendfile  on;
    keepalive_timeout 65;


    limit_zone  flv_down  $binary_remote_addr  10m;

#使用limit_zone命令定义一个zone为flv_down
#flv_down:是一个zone的名字,无限制; 
#binaryremoteaddr:是一个变量,用来做客户端之间的区别,也可以选择其他的变量来区别,但是最典型的#还是binary_remote_addr,这里选用的是二进制格式的IP地址,会比ASCII格式更高效。 
#10m:用于限制大小

    server{
        listen 80;
        server_name flv.abc.com;
        ....
        location /download{
            limit_conn flv_down  1;
# 使用limit_conn命令来实现limit_zone命令的定义的zone,1表示同时连接的数量
        }
    }
    error_page  500 502 503 504 /50x.html;
        location =/50x.html{
            root html;
        }
}
发布了143 篇原创文章 · 获赞 31 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_42112846/article/details/100051877
今日推荐