Nginx服务器的功能模块

Nginx和Apache的区别优点

1、Nginx与Apache比较的优点

对于这个问题,并不能说哪一个较好,本身他们都有优缺点,例如:Apache提供了几百个模块,模块就意味着功能,但作为一个Apache服务器最多只有2000多的并发量,Nginx提供的模块也就几十个,但他却可以提供20000的并放量。Apache的功能多,而Nginx的功能少,但有一句话可以很好的说明:

1Apache就像Office一样,他有几十万的选项,但你只需要那么六个功能能选 2项,Nginx只做了这六个功能,但是他做的这六件事中基本是Apache做的50倍。 3 --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变量,为该变量传递相应的值来实现,例如:

1server{ 2 if($slow){ 3 set $limit_rate 4k; 4 } 5}

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

该指令是“在。。。后在限制速度为。。。”,意思就是以最大的速度下载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区段。

示例:

1http{ 2 limit_zone one $binary_remote_addr 10m; 3 server{ 4 location /download/{ 5 limit_conn one 16 } 7 } 8}

(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错误。
例如:

1limit_zone one $binary_remote_addr 10m; 2 3server{ 4 location /download/{ 5 limit_conn one 1; 6 } 7}

这个设置将会使得俩字与同一个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
该指令用于设置错误级别,当连接达到限制之后,将会产生错误日志。

综合实例:

1worker_progresses 4; 2 3event{ 4 worker_connection 10240; 5} 6 7http{ 8 include mime.types; 9 default_type application/octet-stream; 10 sendfile on; 11 keepalive_timeout 65; 12 limit_zone flv_down $binary_remote_addr 10m; 13 14 server{ 15 listen 80; 16 server_name flv.abc.com; 17 .... 18 location /download{ 19 limit_conn flv_down 1; 20 } 21 } 22 error_page 500 502 503 504 /50x.html; 23 location =/50x.html{ 24 root html; 25 } 26}

1、使用limit_zone命令定义一个zone为flv_down

limit_zone  flv_down  $binary_remote_addr  10m;

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

2、使用limit_conn命令来实现limit_zone命令的定义的zone,1表示同时连接的数量

limit_conn flv_down  1;
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Nginx配置https

一、开启nginx的ssl模块1.未安装过nginx,编译安装配置参数如下:./configure\prefix/usr/local/nginx\withpcre\withhttp\_ssl\_modulessl模块\withhttp\_stub\_status\_module\wit