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
该指令是“在。。。后在限制速度为。。。”,意思就是以最大的速度下载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;
server{
listen 80;
server_name flv.abc.com;
....
location /download{
limit_conn flv_down 1;
}
}
error_page 500 502 503 504 /50x.html;
location =/50x.html{
root html;
}
}
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;