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
該指令是“在。。。後在限制速度為。。。”,意思就是以最大的速度下載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;