歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

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;
Copyright © Linux教程網 All Rights Reserved