您當前所在位置:
首頁 →
服務器 →
WEB服務器 →
通過內(nèi)核httpd實現(xiàn)web服務加速
通過內(nèi)核httpd實現(xiàn)web服務加速
時間:2015-06-28 00:00:00
來源:IT貓撲網(wǎng)
作者:網(wǎng)管聯(lián)盟
我要評論(0)
- 一、簡介
從linux2.4.13開始,在Networking options出現(xiàn)了一個試驗性的選項-"[ ] Kernel httpd acceleration (EXPERIMENTAL)",什么是kHTTPd呢?它是一個Linux環(huán)境下的web服務器。kHTTPd和其它web服務器的不同之處在于其是作為內(nèi)核的一部分運行在Linux的內(nèi)核中(可以看成是一個設(shè)備驅(qū)動)。
kHTTPd僅僅處理靜態(tài)(基于靜態(tài)文件的)的web頁面,而將所有的對于非靜態(tài)內(nèi)容的請求傳遞給正常的運行于用戶空間的web服務器來處理,如apache、Zeus等,而這些運行在用戶空間的web服務器并不需要任何修改。
對于靜態(tài)web頁面的http請求的處理不是一個非常復雜過程,但是這卻是web服務中非常重要的一個部分,因為至少網(wǎng)站中大多數(shù)圖形都是靜態(tài)的,而且還有很多html文件時靜態(tài)的。一個常規(guī)的web服務器對于靜態(tài)頁面的http請求處理非常簡單,僅僅是拷貝"文件到網(wǎng)絡"的簡單操作。如果這些操作在內(nèi)核中完成將變得非常高效。例如也是完成類似的功能的NFS服務器也是運行在內(nèi)核中的。
通過在內(nèi)核中實現(xiàn)web請求處理加速,通常意義的web服務器-如apache等則可以專注于處理那些動態(tài)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文件系統(tǒng)來進行的,因此可以在腳本中實現(xiàn)自動配置。大多數(shù)參數(shù)只能在kHTTPd沒有啟動以前才能設(shè)置。
???
一般可以配置以下參數(shù):
???1) kHTTPd監(jiān)聽的服務請求端口
???2) "Apache"監(jiān)聽的端口(在"localhost"接口中)
???3) web文檔root目錄(documentroot)
???4) 動態(tài)內(nèi)容的請求所包含的字符串(可選的)
[ 默認包括"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
???如果你感覺對你來說這個過程太慢了(上面的命令需要等待遠程連接首先關(guān)閉),可以在停止其停止以后向服務器發(fā)送HUP信號,這將導致服務器線程立即停止。
???
???注:如果這些進程沒有被停止,它們會馬上重新啟動。
四、 限制
kHTTPd的安全模式非常嚴格,這是因為有用戶空間的web服務器可以處理復雜的情況:
???kHTTPd只有在滿足下面的條件才會處理請求:
???
??1) URL中沒有"?"
??2) URL以"/"開始
??3) URL指定的文件存在
??4) 該文件的權(quán)限是所有用戶可讀的(*)
??5) 文件不是一個目錄,不是可執(zhí)行文件,沒有sticky位置位(*)
??6) URL不包含任何非法子串,如:".."、"cgi-bin"等(*)
??7) 文件的mime類型是可知的(*)
???這里后面標注*的條件是可以通過/proc/sys/net/khttpd來配置的
???不滿足上面任何條件的請求將被轉(zhuǎn)交給用戶空間的web服務器來處理。,
五、參數(shù)
???下面的參數(shù)可以通過/proc/sys/net/khttpd被配置:
?
??變量名 默認值 含義
??serverport 8080 kHTTPd監(jiān)聽的服務端口
??clientport 80 用戶空間的web服務器的監(jiān)聽端口
??threads 2 服務器線程的數(shù)量,對于小型web來說應該是每個CPU對應一個,對于大型網(wǎng)站來說(活動文件不是保存在RAM中),其值應該是每個CPU對應2
??documentroot /var/www web內(nèi)容所在目錄
??
??start 0 設(shè)置為1來啟動kHTTPd (該位可能被"stop"自動設(shè)置為0)
??stop 0 設(shè)置為1來停止kHTTPd (該位可能被"start"自動設(shè)置為0)
??unload 0 設(shè)置為1來準備卸載kHTTPd模塊
??sloppymime 0 如果為1,那么為止的mime類型自動設(shè)置為text/html,如果為0則未知mimi類型的文件將由用戶空間的web服務器來處理
??perm_required S_IROTH 需要的最小限制(其值參考"man 2 stat")
??
??perm_forbid dir+sticky+ 文件禁止的限制掩碼(其值參考"man 2 stat")
??dynamic cgi-bin .. 動態(tài)內(nèi)容請求URL包含的子串
??maxconnect 1000 當前最大連接數(shù)關(guān)鍵詞標簽:服務,加速,實現(xiàn),通過,
相關(guān)閱讀
熱門文章
ISAPI Rewrite實現(xiàn)IIS圖片防盜鏈
IIS6.0下配置MySQL+PHP5+Zend+phpMyAdmin
在Windows服務器上快速架設(shè)視頻編解碼器全攻略
win2000server IIS和tomcat5多站點配置
人氣排行
XAMPP配置出現(xiàn)403錯誤“Access forbidden!”的解決辦法
WIN2003 IIS6.0+PHP+ASP+MYSQL優(yōu)化配置
訪問網(wǎng)站403錯誤 Forbidden解決方法
如何從最大用戶并發(fā)數(shù)推算出系統(tǒng)最大用戶數(shù)
Server Application Unavailable的解決辦法
報錯“HTTP/1.1 400 Bad Request”的處理方法
Windows Server 2003的Web接口
http 500內(nèi)部服務器錯誤的解決辦法(windows xp + IIS5.0)