歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux中用內核KHTTPD實現Web服務加速

一、簡介

從Linux2.4.13開始,在Networking options出現了一個試驗性的選項-'[ ] Kernel httpd acceleration (EXPERIMENTAL)',什麼是kHTTPd呢?它是一個Linux環境下的web服務器。kHTTPd和其它web服務器的不同之處在於其是作為內核的一部分運行在Linux的內核中(可以看成是一個設備驅動)。

KHTTPd僅僅處理靜態(基於靜態文件的)的web頁面,而將所有的對於非靜態內容的請求傳遞給正常的運行於用戶空間的web服務器來處理,如apache、Zeus等,而這些運行在用戶空間的web服務器並不需要任何修改。

對於靜態web頁面的http請求的處理不是一個非常復雜過程,但是這卻是web服務中非常重要的一個部分,因為至少網站中大多數圖形都是靜態的,而且還有很多Html文件時靜態的。一個常規的web服務器對於靜態頁面的http請求處理非常簡單,僅僅是拷貝‘文件到網絡‘的簡單操作。如果這些操作在內核中完成將變得非常高效。例如也是完成類似的功能的NFS服務器也是運行在內核中的。

通過在內核中實現web請求處理加速,通常意義的web服務器-如apache等則可以專注於處理那些動態web請求。

注:這裡Apache指代任何一個web服務器。

二、快速入門

1) 編譯並加載模塊。

2) 如果需要,通過/proc/sys/net/khttpd來對模塊進行配置。

3) echo 1 > /proc/sys/net/khttpd/start。

卸載:

     echo 1 > /proc/sys/net/khttpd/stop   echo 1 > /proc/sys/net/khttpd/unload   rmmod khttpd   

三、配置

1、操作模式

這裡有兩種推薦操作模式:

1) 'Apache' 是主web服務器,kHTTPd是輔助web服務器

     clientport -> 80   serverport -> 8080 (or whatever)   

2) kHTTPd是主web服務器, 'Apache'是輔助web服務器

 

    clientport -> 8080 (or whatever)   serverport -> 80  

2、配置kHTTPd

在啟動kHTTPd之前首先需要對它進行配置。這是通過/proc文件系統來進行的,因此可以在腳本中實現自動配置。大多數參數只能在kHTTPd沒有啟動以前才能設置。

一般可以配置以下參數:

1) kHTTPd監聽的服務請求端口;

2) 'Apache'監聽的端口(在'localhost'接口中);

3) web文檔root目錄(documentroot);

4) 動態內容的請求所包含的字符串(可選的)[ 默認包括"cgi-bin"]。

在這裡指定的documentroot一定要保證和運行在用戶空間的web服務器的documentroot相一致,因為kHTTPd可能會將任何請求重定向給用戶空間的web服務器來處理。

一個典型的腳本(第一種操作模式):

     #!/bin/sh   modprobe khttpd   echo 80 > /proc/sys/net/khttpd/clientport   echo 8080 > /proc/sys/net/khttpd/serverport   echo /var/www > /proc/sys/net/khttpd/documentroot   echo PHP3 > /proc/sys/net/khttpd/dynamic   echo shtml > /proc/sys/net/khttpd/dynamic   echo 1 > /proc/sys/net/khttpd/start  

對於第二種操作模式,其典型的腳本如下:

     #!/bin/sh   modprobe khttpd   echo 8080 > /proc/sys/net/khttpd/clientport   echo 80 > /proc/sys/net/khttpd/serverport   echo /var/www > /proc/sys/net/khttpd/documentroot   echo php3 > /proc/sys/net/khttpd/dynamic   echo shtml > /proc/sys/net/khttpd/dynamic   echo 1 > /proc/sys/net/khttpd/start  

在這種情況下,你首先需要修改Apache的配置:

 

    Port 80   

修改為

     Port 8080   

  QQRead.com 推出數據恢復指南教程 數據恢復指南教程 數據恢復故障解析 常用數據恢復方案 硬盤數據恢復教程 數據保護方法 數據恢復軟件 專業數據恢復服務指南

3、停止kHTTPd

為了修改配置,首先需要停止kHTTPd:

     #echo 1 > /proc/sys/net/khttpd/stop  

如果希望卸載模塊,停止kHTTPd以後,運行:

     echo 1 > /proc/sys/net/khttpd/unload  

如果你感覺對你來說這個過程太慢了(上面的命令需要等待遠程連接首先關閉),可以在停止其停止以後向服務器發送HUP信號,這將導致服務器線程立即停止。

注:如果這些進程沒有被停止,它們會馬上重新啟動。

四、 限制

kHTTPd的安全模式非常嚴格,這是因為有用戶空間的web服務器可以處理復雜的情況,kHTTPd只有在滿足下面的條件才會處理請求:

1) URL中沒有'?';

2) URL以'/'開始;

3) URL指定的文件存在;

4) 該文件的權限是所有用戶可讀的(*);

5) 文件不是一個目錄,不是可執行文件,沒有sticky位置位(*);

6) URL不包含任何非法子串,如:'..'、'cgi-bin'等(*);

7) 文件的mime類型是可知的(*)。

這裡後面標注*的條件是可以通過/proc/sys/net/khttpd來配置的不滿足上面任何條件的請求將被轉交給用戶空間的web服務器來處理。

五、參數

下面的參數可以通過/proc/sys/net/khttpd被配置:

變量名 默認值 含義 serverport 8080 kHTTPd監聽的服務端口 clientport 80 用戶空間的web服務器的監聽端口

threads 2 服務器線程的數量,對於小型web來說應該是每個CPU對應一個,對於大型網站來說(活動文件不是保存在RAM中),其值應該是每個CPU對應2documentroot /var/www web內容所在目錄。

start 0 設置為1來啟動kHTTPd (該位可能被'stop'自動設置為0);

stop 0 設置為1來停止kHTTPd (該位可能被'start'自動設置為0);

unload 0 設置為1來准備卸載kHTTPd模塊;

sloppymime 0 如果為1,那麼為止的mime類型自動設置為text/html,如果為0則未知mimi類型的文件將由用戶空間的web服務器來處理;

perm_required S_IROTH 需要的最小限制(其值參考'man 2 stat');

perm_forbid dir+sticky+ 文件禁止的限制掩碼(其值參考'man 2 stat');

dynamic cgi-bin .. 動態內容請求URL包含的子串;

maxconnect 1000 當前最大連接數。

六、更多信息

關於kHTTPd體系結構的更多信息,參考http://www.fenrus.demon.nl。




Copyright © Linux教程網 All Rights Reserved