歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 通過內核httpd實現web服務加速

通過內核httpd實現web服務加速

日期:2017/2/27 9:39:53   编辑:更多Linux

 一、簡介    從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    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