1. 程式人生 > >apache限制併發數,IP,頻寬設定

apache限制併發數,IP,頻寬設定

給大家推薦兩個Apache模組,一個是mod_vhost_limit,用來限制請求併發數,一個是mod_limitipconn,用來控制Apache的併發聯接數,通過該模組可以限制同一來源IP的併發聯接數。另一個模組是bw_mod,用於Apache網站頻寬控制,可以根據來源IP,網段來劃分頻寬,也可以根據網站檔案型別來限制頻寬,引數比較靈活,可以根據自己實際情況進行調整。

限制併發數

到官方網址: http://ivn.cl/category/apache/ (看不懂的,直接查詢mod_vhost_limit)


安裝:
apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so

在 httpd.conf 加入:

LoadModule vhost_limit_module libexec/mod_vhost_limit.so
AddModule mod_vhost_limit.c

配置:

MaxClients 150
ExtendedStatus On

NameVirtualHost *

<VIRTUALHOST * />
ServerName server1
DocumentRoot /some/where/1
MaxVhostClients 100


<VIRTUALHOST * />
ServerName server2
DocumentRoot /some/where/2
MaxVhostClients 30


<VIRTUALHOST * />
ServerName server3
DocumentRoot /some/where/3


其中: server1 被限制為 100 個併發執行緒數。 server2 被限制為 30 個併發執行緒數。 server3 沒有被限制。

注:需 mod_status 的 ExtendedStatus On 支援!!

如超出限制的併發數在客戶端就會出現503錯誤
----------------------------------------------------------------------------------------------
限制IP連線數


到這裡下載模組 http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz

安裝:
tar zxvf mod_limitipconn-0.04.tar.gz
cd mod_limitipconn-0.04
make APXS=/usr/local/apache/bin/apxs ß-----這裡要按你自己的路徑設定
make install APXS=/usr/local/apache/bin/apxs ß-----這裡要按你自己的路徑設定

編輯httpd.conf
新增
全域性變數:
  < IfModule mod_limitipconn.c >
   < Location / > # 所有虛擬主機的/目錄
  MaxConnPerIP 3 # 每IP只允許3個併發連線
   NoIPLimit image/* # 對圖片不做IP限制
< /Location >

  < Location /mp3 > # 所有主機的/mp3目錄
    MaxConnPerIP 1 # 每IP只允許一個連線請求
    OnlyIPLimit audio/mpeg video # 該限制只對視訊和音訊格式的檔案
< /Location >
< /IfModule >

  

或者虛擬主機的:
< VirtualHost xx.xxx.xx.xx > ##ip 地址
    ServerAdmin
[email protected]

    DocumentRoot /home/easy
    ServerName www.phpv.net
  < IfModule mod_limitipconn.c >
   < Location / >
      MaxConnPerIP 5
  NoIPLimit image/*
   < /Location >
  < Location /mp3 > # 所有主機的/mp3目錄
      MaxConnPerIP 2 # 每IP只允許一個連線請求
      OnlyIPLimit audio/mpeg video # 該限制只對視訊和音訊格式的檔案
  < /Location >
  < /IfModule >
  < /VirtualHost >

----------------------------------------------------------------------------------------------
限制頻寬:



下載模組 ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c
安裝:
/usr/local/apache/bin/apxs -c ./mod_bandwidth.c -o /usr/local/apache/libexec/mod_bandwidth.so

<-------以上/usr/local/apache請設定為你的路徑

編輯httpd.conf
新增:
LoadModule bandwidth_module libexec/mod_bandwidth.so
AddModule mod_bandwidth.c
重啟你的apache
from: http://www.phpv.net/article.php/300

----------------------------------------------------------------------------------------------

一、對於mod_limitipconn,其實該模組不僅提供客戶端併發聯接數的控制能力,從安全形度來說還可以起到對抗固定來源IP地址發起的 DOS攻擊,包括來源固定的大量訪問請求型攻擊(大量GET或POST請求型的攻擊),當同一來源IP地址的聯接數超過限定的值後,會彈回對方的訪問請求,給對方一個“503服務臨時無效”的響應。當Apache伺服器受到大量的訪問請求型攻擊的時候,由於大量的Apache程序及PHP和MYSQL執行消耗,會導致伺服器資源迅速耗盡,網站開啟緩慢或癱瘓。如果是此種類型的攻擊,使用mod_limitipconn模組則可以有效地提升伺服器的抗攻擊能力,因為大量的請求被彈回,節省了伺服器執行PHP及MYSQL的效能消耗。當然只要請求進了80埠,不管是接受還是彈回請求,Aapche都有執行成本,所以此方法只能是減輕而無法解決,畢竟應用層的處理效率是比較低的。
二、對於網站訪問量比較大、使用了mod_limitipconn模組且限制同一客戶端併發聯接數低於3的情況下,如果用Apache預設的配置引數,極可能經常出現“服務臨時無效”的提示。因為Apache預設是設定“KeepAlive on”,且“KeepAliveTimeout 180”,所以一旦建立聯接,那麼在3分鐘內這個聯接是不會被釋放的。所以如果網站不同頁面點選頻率比較高或圖片資源比較多的話,會經常出現服務臨時無效的提示。那麼有兩種方式去解決,一是加大併發聯接數的量,比如設定為普通站點10個併發聯接數,圖片站點則20個。另一種方式就是如果你不想加大這個值的話,可以設定KeepAlive為off,然後縮短Timeout時間,這樣聯接會很快被釋放出來。具體情況根據需要去調整測試,以得到一個最適合自己站點情況的值。
三、如果要同時限制併發聯接數與頻寬的話,就用bw_mod+mod_limitipconn,因為雖然bw_mod也可以控制併發聯接數,但他是針對某個目錄或整個網站的併發聯接數,是用來控制伺服器端的總聯接數,比如設定MaxConnection all 1000,那麼這個網站所能接受的最大併發聯接數為1000,而並不是限制每一客戶端的併發聯接數,而mod_limitipconn則是針對同一來源 IP的客戶端的併發聯接數,所以這兩者的聯接數限制是有所區別的。
四、個人感覺用了bw_mod及mod_limitipconn模組後,網站訪問速度有所下降,能憑直觀地感覺出來,並且CPU的負載有所上升。特別是在網站訪問量比較大的情況下,這兩個模組會消耗一定的主機效能,所以輕重權衡這個得大家自己根據情況來採用了。另外bw_mod裡有個引數是用來設定控制精度與頻率的,預設是1000毫秒,如果你想提高頻寬控制精度就改小這個數值,但會消耗更多的CPU資源,反之亦然,降低精度可提升效能。