• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 通過內核httpd實現web服務加速

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    一、簡介 從 linux 2.4.13開始,在Networking options出現了一個試驗性的選項-"[ ] Kernel httpd acceleration (E XP ERIMENTAL)",什么是kHTTPd呢?它是一個 Linux 環境下的web 服務器 。kHTTPd和其它web服務器的不同之處在于其是作為內核的一部分運行在Li

    一、簡介

        從linux2.4.13開始,在Networking options出現了一個試驗性的選項-"[ ] Kernel httpd aclearcase/" target="_blank" >cceleration (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對應2

    documentroot /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.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>