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地址將用作會話,注意:這裡使用的是
(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的名字,無限制;
10m:用於限制大小
2、使用limit_conn命令來實現limit_zone命令的定義的zone,1表示同時連接的數量
limit_conn flv_down 1;