歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

感受kHTTPd

日期:2017/2/27 9:36:44   编辑:更多Linux

1、kHTTPd概述     Linux平台上有很多傳統的Web Server,例如Apache、Zeus等等。由於這些Web Server都不是內核的模塊,處理來自客戶端的HTTP請求的效率必然受到一定的影響。從2.3.** 版本的kernel開始,在內核中引入一個名為kHTTPd的模塊,來處理簡單的HTTP請求。kHTTPd全名為Kernel httpd accelerator,譯為內核httpd加速器。顧名思義,這是內核的一個模塊;可想而知,由於它是內核的一個模塊,處理HTTP請求的速度自然比傳統的Web Server效率要高(為了簡單起見,下文中使用應用最廣泛的Apache來代表傳統的Web Server)。   下面就讓我們一起來感受一下這個加速器的魅力。     2、下載新的內核     你可以從附近的FTP上下載2.3.**或者2.4.**版本的kernel,到筆者寫這篇文章時為止,目前最新的kernel版本是2.4.0test7。如果你實在找不到,就請到這兒來看一看了:ftp://166.111.160.18/pub/kernel/kernel2.4/。(我們下面以2.3.99的kernel為例,如果你怕麻煩,就下載2.3.99的kernel好了。)   下載的新版本的kernel一般都是*.tgz(或者*.tar.gz)文件或者*.tar.bz2文件。你可以首先把新版本的內核(我們以linux-2.3.99pre4-2.tar.bz2為例)拷貝到/usr/src/下面,可以使用下面的命令:   cp linux-2.3.99pre4.tar.bz2 /usr/src/   (如果源文件是linux-2.3.99pre4.tgz就不用解釋命令應該如何修改了吧?)   現在先讓我們看一下/usr/src/的內容:   cd /usr/src/   ls -l   注意這裡有一個名為linux的符號連接,指向你當前版本的內核源程序的目錄,比如是linux-2.2.14。   bz2文件和tgz(或者tar.gz)文件都是壓縮文件,使用前首先要解壓:tgz(或者tar.gz)文件是使用gzip壓縮的,解壓命令為:   tar -xzvf linux-2.3.99pre4.tar.gz   bz2文件是使用bzip2壓縮的,解壓命令為:   bzip2 -d linux-2.3.99pre4.tar.bz2   tar -xvf linux-2.3.99pre4.tar   現在讓我們再來看一下/usr/src的內容:   ls -l   注意現在的linux已經不是一個符號連接了,而是一個目錄,裡面的內容就是我們剛才解開的新版本的kernel的源程序。為了防止再次升級kernel時覆蓋現在的文件,我們也模仿一下原來的目錄結構做點手腳:   mv linux linux-2.3.99   ln -s linux-2.3.99 linux   這樣我們就不用擔心現在版本的源程序了,即使你再升級一次內核,也不過重復一次上面的過程,而不會丟失任何內容。     3、編譯內核     由於kHTTPd、IPV6等都是新加入的功能,現在仍處於實驗階段,缺省情況下在編譯內核時是不能選中這些模塊的。使用下面的命令,打開defconfig文件:   vi /usr/src/linux/arch/i386/defconfig   找到# CONFIG_EXPERIMENTAL is not set,這一行被注釋掉了,所以在選擇要編譯的模塊時,kHTTpd等實驗內容是灰掉不可選的。在這一行下面增加一行:CONFIG_EXPERIMENTAL=y(如圖1所示),這樣我們就可以選擇kHTTPd等內容了。   圖1 defconfig.jpg   接下來要做一點准備工作,首先使用下面的命令:   make menUConfig(或者是make config,不推薦)   如果你可以使用Xwindow,還有更好的選擇:   運行startx命令,在一個xterm下輸入make xconfig(確保路徑為/usr/src/linux),就可以在更加細膩的圖形界面下選擇需要適合自己的模塊(見圖2)。     圖2 xconfig_main.jpg   根據自己的需要選擇適當的內容,注意在Networking options中把khttpd作為模塊選中(見圖3)。     圖3 xconfig_netoption.jpg   然後,執行下面這些命令:   make dep   make bzImage   make modules   make modules_install   depmod -a   (注:如果你使用的是2.4.0-test7版本的kernel,在make modules_install一步時會出現錯誤,原因是你的modutils版本太低,2.4.0-test7的kernel至少需要modutils-2.3.13,把modutils升級一下就好了。)   現在,我們已經編譯好了新的內核,接下來的工作是要讓新內核發揮作用。首先要把bzImage拷貝到/boot/下,bzImage一般是位於/usr/src/linux/arch/i386/boot/,使用下面的命令:   cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.99   然後修改/etc/lilo.conf文件,仿照下面的內容自己根據需要編寫一段,加入/etc/lilo.conf中:   image = /boot/vmlinuz-2.2.14-5.0    root = /dev/hda1 (根據自己的系統可能有所不同)    label = linux    read-only   加入內容為:   image = /boot/vmlinuz-2.3.99    root = /dev/hda1 (根據自己的系統進行適當的修改)    label = linux2399    read-only   現在敲入lilo -v,然後重新啟動吧,激動人心的時刻就要來臨了。     4、感受kHTTPd     kHTTPd本身的功能並不是十分強大,需要和Apache等傳統的Web Server一起協同工作。推薦的工作模式有兩種:   1. Apache作主Web Server,kHTTPd作輔助   2. kHTTPd作主Web Server,Apache作輔助   如果Apache作主Web Server,可以這樣配置並啟動kHTTPd:   #!/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   上面的documentroot要和Apache的設置保持一致。   啟動Apache,在Netscape的URL中鍵入http://localhost/index.html (當然在上面配置的documentroot目錄下面得有這個index.html文件才行)看看效果吧,怎麼樣,kHTTPd發揮作用了!怎麼?你不相信這是kHTTPd的功勞?好,讓我們采用第二種方式,使用kHTTPd作為主Web Server,並且停掉Apache,看看情形如何?配置並啟動的命令如下:   #!/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   再次使用Netscape,輸入http://localhost/index.html(當然在上面配置的documentroot目錄下面得有這個index.html文件才行),你看到了什麼?這下你沒話說了吧?   停止kHTTPd的命令是:   echo 1 > /proc/sys/net/khttpd/stop   停止kHTTPd之後,你可以將該模塊卸載,命令如下:   echo 1 > /proc/sys/net/khttpd/unload     5、kHTTPd的局限     kHTTPd畢竟只是內核的一個小模塊,功能上有很多局限。它只能處理以下內容:   1. URL中不包含"?"   2. URL以"/"開始   3. URL中指明的文件存在   4. URL中指明的文件可以讀取   5. URL中指明的文件不是目錄,沒有設置粘滯鍵,不能執行   6. URL中不包含任何".."之類可隱藏的字符串   7. 客戶端請求的mime-type是已知的   可以想象,kHTTPd對於CGI、ASP等等需要執行或者解釋的腳本是無能為力的,實際上kHTTPd並不真正處理這些請求,這需要Apache來解決了。     6、kHTTPd參數列表及其說明     kHTTPd所有的參數都可以通過/proc/sys/net/khttpd進行設置,完成的參數列表如下: 參數名 缺省值 說明   serverport 8080 KHTTPd監聽的端口   clientport 80 其它Web Server使用的端口   threads 2 服務器線程的個數   documentroot /var/www 文檔路徑   start 0 該值設置為1,啟動kHTTPd   stop 0 該值設置為1,停止kHTTPd   unload 0 該值設置為1,卸載kHTTPd模塊   sloppymime 0 如果該值設置為1,那麼不能識別的mime-type都認為是text/html;如果該值設置為0,那麼不能識別的mime-type由其它Web Server處理   perm_required   S_IROTH S_IROTH 最小要求許可   perm_forbid dir+sticky+execute 禁止權限掩碼   dynamic cgi-bin .. 如果URL中包含動態內容,就說明為"dynamic content"   maxconnect 1000 當前最大連接數   






Copyright © Linux教程網 All Rights Reserved