<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      37 Posts :: 64 Stories :: 21 Comments :: 0 Trackbacks

    1.什么是Apache

    Apache,是一種開放源碼的HTTP服務器,可以在大多數操作系統中運行,由于其多平臺和安全性所以被廣泛使用,是目前最流行的Web服務器軟件之一。Apache 起初由 Illinois 大學 Urbana-Champaign 的國家高級計算程序中心開發,開始Apache只是作為Netscape網頁服務器之外的選擇。漸漸的,它開始在功能和速度上超越其它基于UnixHTTP服務器。從19964月以來,Apache一直是Internet上最流行的HTTP服務器: 19995月它在 57% 的網頁服務器上運行;而到了20057月這個比例上升到了69%Apache名稱的由來是為了紀念美洲印第安人土著中的一支,因為這支土著擁有最高超的作戰策略和無窮的耐性。

    2.什么是 Apache HTTP Server

    Apache HTTP Server(也被稱為Apache httpd)Apache軟件基金會創建的一個健壯的、工業級的、功能強大的、開放源代碼的HTTP(Web)服務器。

    二、           httpd.conf中常用參數介紹

     

    1. 連接類參數

     

    TimeOut

    服務器在斷定請求失敗前等待的時間,接收和發送數據的超時時間。

    【說明】

    TimeOut參數用于設置Apache在等待以下三種事件的時間:

    u   接受一個GET請求耗費的總時間。

    u   POSTPUT請求時,接受兩個TCP包之間的時間。

    u   回應時TCP包傳輸中兩個ACK包之間的時間。

    還可以理解成Apache允許每次通過HTTP協議傳輸數據的最大時間。

    KeppAlive

    啟用HTTP持續作用。

    【說明】

    持續作用擴展自HTTP/1.0HTTP/1.1的長連接特性。提供了長效的HTTP會話,用以在同一個TCP連接中進行多次請求。在某些情況下,這樣的方式會對包含大量圖片的HTML文件起到50%的加速作用。對于使用HTTP/1.0的客戶端來說,只有客戶端設置使用的時候才會使用持續作用連接。而對于HTTP/1.1的客戶端來說,如果沒有進行特殊指定,長連接將是默認的連接方式。

     

    MaxKeppAliveRequests

     一個長連接中允許的請求數量。

    【說明】

    該參數限制了當啟用KeepAlive時,每次連接允許的請求數量。如果將此值設為0,將不限制請求的數量。這里建議最好將此值設為一個比較大的值,以確保最優的服務器性能。

     

    KeppAliveTimeOut

    持續作用中服務器在兩次請求之間的等待時間。

    【說明】

    Apache在關閉本次連接前等待下一次請求的時間,即在這段時間內該連接沒有接收到請求就會關閉此連接。一旦收到一個請求,超時值將會被設置為KeppAliveTimeOut的值。

    注意:對于高負荷的服務器來說,如果把該參數的值設置的較大可能會導致一些性能方面的問題,因為KeppAliveTimeOut的值會影響釋放空閑進程、線程時間的數量,如果該值大,那么在一定時間區間內釋放出來的空閑進程、線程的數量會少于該值小的,所以會降低服務器處理請求的能力,從而影響整個系統的吞吐量。

     

    Listen

    服務器監聽IP地址和端口。

    【說明】

    Listen參數是指Apache服務器在指定的IP地址和端口上進行監聽;默認情況下Apache會在所有IP地址上監聽。Listen是一個必須設置的指令。如果在配置文件中找不到這個指令,服務器將無法啟動。

    Listen參數還可以指定服務器在哪個端口或地址和端口的組合上進行監聽請求。如果只指定一個端口,服務器將在所有地址上監聽該端口。如果指定了地址和端口的組合,服務器將按照指定地址和指定的端口進行監聽。

    使用多個Listen參數可以指定多個不同的監聽端口和/或地址端口組合。

    例如,想要服務器接受808080端口上的請求,可以這樣設置:

    Listen 80
    Listen 8080

    為了讓服務器在兩個確定的地址端口組合上接受請求,可以這樣設置:

    Listen 192.64.182.1:80
    Listen 192.64.182.5:8080

    注意:多個Listen指令指定了同一個地址和端口的組合后,會導致"Address already in use"錯誤。

    2. 系統路徑管理類參數

    ServerRoot

    服務器的安裝基礎目錄。

    【說明】

    該參數設置了服務器所在的目錄。一般來說它將包含conf/logs/子目錄。其它配置文件的相對路徑都基于此目錄 (比如IncludeLoadModule)

    例如:

    ServerRoot /etc/httpd

     

    DocumentRoot

    組成網絡上可見的主文檔樹的根目錄。

    【說明】

    此參數設置了httpd服務的目錄。在沒有配置類似Alias這種參數的情況下,服務器會將請求中的URL附加到DocumentRoot后面以構成指向文檔的路徑。比如說:

    DocumentRoot /etc/httpd/www/web

    于是對http://www.ccb.com.cn/index.html的訪問就會指向/etc/httpd/www/web/index.html。如果參數中不是絕對路徑,則被假定為是相對于ServerRoot的路徑。

    注意:指定DocumentRoot時不應包括最后的"/"

     

    Directory

    可以封裝一組參數,使之僅對文件空間中的某個目錄及其子目錄生效

    【語法】

    <Directory directory-path> ... </Directory>

    【說明】

    <Directory></Directory>用于封裝一組參數,使其對某個目錄及其子目錄生效。directory-path可以是一個目錄的完整路徑,或是包含了Unix shell匹配語法的通配符字符串,但是通配符都不能匹配"/"字符,例如:<Directory /*/public_html>是無法匹配/home/user/public_html 的,而<Directory /home/*/public_html>卻能夠正確匹配。

    directory-path參數必須與被訪問文件所在文件系統的路徑保持一致。如果有多個非正則表達式,<Directory>配置段符合并包含某文檔的目錄(或其父目錄),那么會以短目錄優先的規則進行應用。<Directory />的默認訪問權限為"Allow from All",這意味著Apache沒有進行訪問控制,通過設置OrderDenyAllowAllowOverride這個幾個參數可以對訪問進行控制。

    下面簡單介紹一下這4個參數的用法。

    1>     Allow

    該參數是控制哪些主機才可以訪問目標。

    示例:

    Allow from 192.64.182.53
    Allow from 192.64.182.1 192.64.182.3

    表示IP地址為192.64.182.1192.64.182.3192.64.182.53才可以訪問目標。

    2>     Deny

    該參數是控制哪些主機被禁止訪問目標。

    示例:

    Deny from 192.64.182.53
    Deny from 192.64.182.1 192.64.182.3

    表示IP地址為192.64.182.1192.64.182.3192.64.182.53則不能訪問目標。

    3>Order

    Order參數是控制AllowDeny參數生效順序的,常用的取值是:Deny,Allow Allow,Deny。例如:

    Order Deny,Allow

    Deny from 192.64.182.53

    Allow from 192.64.182.1 192.64.182.3

    表示先考慮Deny條件再考慮Allow條件,該配置的意思是拒絕IP地址為192.64.182.53的訪問,只允許192.64.182.1 192.64.182.3的訪問。

    再看一個例子:

    Order Allow,Deny

    Allow from all

    Deny from 192.64.182.53

    表示只拒絕IP地址為192.64.182.53的訪問。

    4>AllowOverride

    當服務器發現一個.htaccess文件(AccessFileName指定)時,它需要知道在這個文件中聲明的哪些指令能覆蓋在此之前指定的配置參數。一般情況下NONE即可。

    Directory參數小結】

    最后給出一個完整封裝目錄的配置段:

    <Directory "/home/hrdc/images">

    Options Indexes FollowSymLinks       //URL映射到的系統目錄產生文件列表

    AllowOverride None

    Order Deny,Allow
    Allow from all

    </Directory>

    上面的配置對系統中的"/home/hrdc/images"目錄進行了封裝,而且對訪問不加任何限制。這段配置后面在講如何將靜態文件放置到Apache上還會用到。

    3.監控反饋類參數

    PidFile

    服務器用于記錄父進程(監控進程)PID的文件

    【說明】

    PidFile指令設置服務器用于記錄

    父進程(監控進程)PID的文件。如果指定的不是絕對路徑,那么將視為基于ServerRoot的相對路徑。

    示例:

    PidFile /var/run/apache.pid

    這個文件通常用來給服務器父進程發送一個信號,用于關閉或重啟服務器,以便重新打開ErrorLogTransferLog文件、重新讀取配置文件。

    ServerAdmin

    服務器返回給客戶端的錯誤信息中所包含的管理員郵件地址。

    【說明】

    該參數是在所有返回給客戶端的錯誤信息中給出管理員的郵件地址。但也可以是一個URL地址,如果httpd不能將該參數的值識別為URL,它就會假定它是一個email-address ,并在超連接中用在mailto后面。這里推薦配置一個Email地址,如果配置的是URL一定要保證指向一個受控制的服務器,否則用戶將無法確保和管理員取得聯系。

    示例:

    ServerAdmin hradmin.zh@ccb.cn

    4.日志管理類參數:

    LogLevel

    控制錯誤日志的級別

    【說明】

    LogLevel用于設置服務器按照日志級別來記錄日志信息。該參數可以選擇的level有:

    Level

    描述

    例子

    emerg

    緊急(系統無法使用)

    "Child cannot open lock file. Exiting"

    alert

    必須立即采取措施

    "getpwuid: couldn't determine user name from uid"

    crit

    致命情況

    "socket: Failed to get a socket, exiting child"

    error

    錯誤情況

    "Premature end of script headers"

    warn

    警告情況

    "child process 1234 did not exit, sending another SIGHUP"

    notice

    一般重要情況

    "httpd: caught SIGBUS, attempting to dump core in ..."

    info

    普通信息

    "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..."

    debug

    調試信息

    "Opening config file ..."

    注意:當指定了某個級別后,所有級別高于它的信息也會被同時記錄。建議至少使用crit級別。當錯誤日志是一個單獨分開的正式文件的時候,notice級別的消息總是會被記錄下來,而不能被屏蔽。

    ErrorLog

    存放錯誤日志的位置

    【說明】

    該參數指定了當服務器遇到錯誤時記錄日志的文件名。如果該值不是一個以斜杠(/)開頭的絕對路徑,那么將被認為是一個相對于ServerRoot的相對路徑。

    示例

    ErrorLog /etc/var/log/httpd/error_log

    如果配置了一個以管道符號(|)開頭的值,那么會為它指定一個命令來處理錯誤日志。

    示例

    ErrorLog "|/usr/local/bin/httpd_errors"

    注意:當在非Unix平臺上輸入文件路徑的時候,路徑分隔符必須統一使用正斜線(/)

     

    CustomLog

    設置服務器訪問日志的文件名和格式。

    【說明】

    該參數用來對服務器的請求進行日志記錄。第一個參數指定了日志文件的位置,第二個參數用于設置日志的格式。

    示例:

    CustomLog logs/access_log "%h %l %u %t ""%r"" %>s %b"

    定制日志文件格式

    LogFormatCustomLog的格式化參數是一個字符串。這個字符串會在每次請求發生的時候,被記錄到日志中去。它可以包含將被原樣寫入日志文本放入字符串以及C風格的控制字符""n"""t"。文本中的引號和反斜杠應通過"""來轉義。請求本身的情況也將通過在格式字符串中放置各種"%"轉義符的方法來記錄,它們在寫入日志文件時,根據下表的定義進行轉換:

    格式字符串

    描述

    %%

    百分號(Apache2.0.44或更高的版本)

    %a

    遠端IP地址

    %A

    本機IP地址

    %B

    HTTP頭以外傳送的字節數

    %b

    CLF格式顯示的除HTTP頭以外傳送的字節數,也就是當沒有字節傳送時顯示'-'而不是0

    %{Foobar}C

    在請求中傳送給服務端的cookieFoobar的內容。

    %D

    服務器處理本請求所用時間,以微為單位。

    %{FOOBAR}e

    環境變量FOOBAR的值

    %f

    文件名

    %h

    遠端主機

    %H

    請求使用的協議

    %{Foobar}i

    發送到服務器的請求頭Foobar:的內容。

    %l

    遠端登錄名(identd而來,如果支持的話),除非IdentityCheck設為"On",否則將得到一個"-"

    %m

    請求的方法

    %{Foobar}n

    來自另一個模塊的注解Foobar的內容。

    %{Foobar}o

    應答頭Foobar:的內容。

    %p

    服務器服務于該請求的標準端口。

    %P

    為本請求提供服務的子進程的PID

    %{format}P

    服務于該請求的PIDTID(線程ID)format的取值范圍為:pidtid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)

    %q

    查詢字符串(若存在則由一個"?"引導,否則返回空串)

    %r

    請求的第一行

    %s

    狀態。對于內部重定向的請求,這個狀態指的是原始請求的狀態,---%>s則指的是最后請求的狀態。

    %t

    時間,用普通日志時間格式(標準英語格式)

    %{format}t

    時間,用strftime(3)指定的格式表示的時間。(默認情況下按本地化格式)

    %T

    處理完請求所花時間,以秒為單位。

    %u

    遠程用戶名(根據驗證信息而來;如果返回status(%s)401,可能是假的)

    %U

    請求的URL路徑,不包含查詢字符串。

    %v

    對該請求提供服務的標準ServerName

    %V

    根據UseCanonicalName指令設定的服務器名稱。

    %X

    請求完成時的連接狀態:

    X=

    連接在應答完成前中斷。

    +=

    應答傳送完后繼續保持連接。

    -=

    應答傳送完后關閉連接。

    (1.3以后的版本中,這個指令是%c,但這樣就和過去的SSL語法:%{var}c沖突了)

    %I

    接收的字節數,包括請求頭的數據,并且不能為零。要使用這個指令你必須啟用mod_logio模塊。

    %O

    發送的字節數,包括請求頭的數據,并且不能為零。要使用這個配置你必須啟用mod_logio模塊。

    修飾符

    可以緊跟在"%"后面加上一個逗號分隔的狀態碼列表來限制記錄的條目。例如,"%400,501{User-agent}i"只記錄狀態碼400501發生時的User-agent頭內容;不滿足條件時用"-"代替。狀態碼前還可以加上"!"前綴表示否定,"%!200,304,302{Referer}i"記錄所有不同于200,304,302的狀態碼發生時的Referer頭內容。"<"">"修飾符可以用來指定對于已被內部重定向的請求是選擇原始的請求還是選擇最終的請求。默認情況下,%s, %U, %T, %D, %r 使用原始請求,而所有其他格式串則選擇最終請求。例如,%>s 可以用于記錄請求的最終狀態,而 %<u 則記錄一個已經被內部重定向到非認證資源的請求的原始認證用戶。

    官方的一些說明

    出于安全考慮,從2.0.46版本開始,%r, %i, %o 中的特殊字符,除了雙引號(")和反斜線(")分別用 "" "" 進行轉義、空白字符用C風格("n, "t )進行轉義以外,非打印字符和其它特殊字符使用 "xhh 格式進行轉義(hh是該字符的16進制編碼)。在2.0.46以前的版本中,這些內容會被完整的按原樣記錄。這種做法將導致客戶端可以在日志中插入控制字符,所以在處理這些日志文件的時候要特別小心。在2.0版本中(不同于1.3)%b %B 格式字符串并不表示發送到客戶端的字節數,而只是簡單的表示HTTP應答字節數(在連接中斷或使用SSL時與前者有所不同)mod_logio提供的 %O 格式字符串將會記錄發送的實際字節數。

    示例

    一些常見的格式串:

    通用日志格式(CLF)

    "%h %l %u %t ""%r"" %>s %b"

    帶虛擬主機的通用日志格式

    "%v %h %l %u %t ""%r"" %>s %b"

    NCSA擴展/組合日志格式

    "%h %l %u %t ""%r"" %>s %b ""%{Referer}i"" ""%{User-agent}i"""

    Referer日志格式

    "%{Referer}i -> %U"

    Agent(Browser)日志格式

    "%{User-agent}i"

     

    URL映射類參數

    Alias

    URL映射到文件系統的特定區域。

    【說明】

    語法:Alias URL-path file-path|directory-path

    Alias參數使文件可以被存儲在DocumentRoot以外的本地文件系統中。以(%已解碼的)url-path路徑開頭的URL可以被映射到以directory-path開頭的本地文件中。

    示例:

    Alias /image /etc/var/www/images

    "http://www.ccb.com/image/foo.gif"的請求,服務器將返回"/etc/var/www/images/foo.gif"文件。由于該參數是匹配完整路徑,所以請求是"http:// www.ccb.com /imagefoo.gif"將不會被匹配。

    注意:如果url-path中有后綴"/",則服務器要求有后綴"/"以擴展此別名。也就是說"Alias /icons/ /usr/local/apache/icons/"并不能對"/icons"實現別名.

    注意,可能需要額外指定一個<Directory>段來覆蓋別名的最終對象。由于只有出現在<Directory>段之前的別名才會被檢測,所以它只對最終對象生效。如果對在DocumentRoot之外的某個目錄建立了一個Alias ,則可能需要明確的對目標目錄設定訪問權限。

    示例:

    Alias /image /ftp/pub/image
    <Directory /ftp/pub/image>
    Order allow,deny
    Allow from all
    </Directory>

     

    二、多路處理模塊的配置說明

    Apache HTTP服務器是一個強大的、靈活的能夠在多種平臺、不同環境下運行的Web服務器。由于不同的平臺和不同的環境經常產生不同的需求,為了達到同樣的最佳效果則需要采取不同的實現方法, Apache的模塊化設計就可以很好的適應大量不同的環境。使得網站管理員能夠在編譯和運行時憑借載入不同的模塊來決定服務器的附加功能。Apache的多路處理模塊(MPM)就是用于選擇處理網絡端口綁定、接受請求并指派子進程處理來自客戶端的請求。

    默認的MPM

    下表列出了不同操作系統上默認的MPM。如果編譯時沒有進行選擇,這將是默認選擇的MPM

    操作系統名稱

    MPM名稱

    BeOS

    beos

    Netware

    mpm_netware

    OS/2

    mpmt_os2

    Unix

    prefork

    Windows

    mpm_winnt

    1prefork.c模塊(一個非線程型的、預派生的MPM)

     prefork.c模塊是由一個單獨的控制進程(父進程)負責產生子進程,這些子進程用于監聽請求并作出應答。Apache設置了一些備用的(spare)或者是空閑的子進程來處理即將接收的請求,這樣可以避免服務器接收到請求后在創建子進程。在Unix系統中,父進程通常以root身份運行以便邦定80端口,而 Apache產生的子進程通常以一個低特權的用戶運行。UserGroup參數就是用于設置子進程的低特權用戶。運行子進程的用戶必須要對它所服務的內容有讀取的權限,但是對服務內容之外的其他資源最好擁有盡可能少的權限。

    【配置示例】

    <IfModule prefork.c>

    StartServers             8

    MinSpareServers         5

    MaxSpareServers        20

    ServerLimit            400

    MaxClients            256

    MaxRequestsPerChild 4000

    </IfModule>

    【參數說明】

    1.ServerLimit
    默認的MaxClient最大是256個線程,如果想設置更大的值,就需要修改ServerLimit這個參數。例子中的400ServerLimit這個參數的最大值。如果需要更大,則必須編譯apache,此前都是不需要重新編譯Apache

    2.StartServers
    指定服務器啟動時建立的子進程數量,因為子進程的數量動態的取決于負載的輕重,所以一般沒有必要調整這個參數,prefork模式默認為5

    3.MinSpareServers
    指定空閑子進程的最小數量,所謂空閑子進程是指沒有正在處理請求的子進程。默認為5。如果當前空閑子進程數少于MinSpareServers ,那么Apache將以最大每秒一個的速度產生新的子進程,只有機器在非常繁忙的情況下才需要調整這個參數。

    4.MaxSpareServers
    設置空閑子進程的最大數量。默認為10。如果當前有超過MaxSpareServers數量的空閑子進程,那么父進程將殺死多余的子進程。如果該參數的值設置比MinSpareServers小,Apache則會自動將其修改成"MinSpareServers+1"

    5.MaxClients
    指可以服務于客戶端請求的最大子進程數量,即限定同一時間客戶端最大接入請求的數量,默認值為256。任何超過MaxClients限制的請求都將進入等候隊列,一旦一個連接被釋放,隊列中的請求將得到服務。

    6.MaxRequestsPerChild
    每個子進程在其生存期內允許處理的最大請求數,默認為10000.到達MaxRequestsPerChild的限制后,子進程將會結束。如果MaxRequestsPerChild"0",子進程將永遠不會結束。這個參數也可以理解成控制服務器殺死舊進程產生新進程的頻率。
    注意:
    從系統穩定性來考慮將MaxRequestsPerChild設置成非零有兩個好處:
    1.可以防止(偶然的)內存泄漏無限進行,從而耗盡內存。
    2.
    給進程一個有限壽命,從而有助于當服務器負載減輕的時候減少活動進程的數量。

    【工作原理介紹】

    首先服務啟動后會創建以StartServers個數的進程,然后等待來自客戶端的請求。我們這里先假設從客戶端來了大量的請求,這時Apache服務器會根據自身的負載情況自動創建新進程,如果服務器一直沒有空閑進程那么它就會一直創建新進程,直到滿足MaxClientsServerLimit設置的最大值。如果來自客戶端的負載沒有那么大,Apache服務器將會根據MinSpareServersMaxSpareServersMaxRequestsPerChild設置的值來殺掉多余的進程。其中每個進程在某個確定的時間只能維持一個連接。

    【小結】

    上面敘述的這些參數中,對系統性能影響較大的有兩個:MaxClients ServerLimit。這個兩個參數主要影響Web服務器處理客戶端請求的能力,它們決定著服務器創建用來處理請求的進程的最大值。如果來自客戶端的請求總數已經達到系統創建進程的最大值(可通過ps -ef|grep http|wc –l來確認),那么后面來的請求就要排隊,直到某個已處理請求完成。這就是應用系統資源還很富余而HTTP訪問卻很慢的主要原因。如何找出這個兩個參數的最佳值需要綜合很多因素,但一般情況下可以參考系統性能測試結果和Web服務器的系統資源。

    注意:prefork模式下創建較多的進程將會占去大量系統內存,如果MaxClientsServerLimit設置過大時可能會造成Web服務器崩潰。

    2worker.c模塊(支持混合的多線程多進程的多路處理模塊)
         
    worker 模塊使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務器上,worker 模式是個比較好的選擇,因為它的內存使用比prefork要低得多。但worker模式也有不完善的地方,如果一個線程崩潰,整個進程就會連同其所有線程一起"死掉"。由于線程共享內存空間,所以一個進程在運行時必須被系統識別為"每個線程都是安全的"

    【配置示例】 

    <IfModule worker.c>

    StartServers           2

    MaxClients          400

    ServerLimit          12

    MinSpareThreads     25

    MaxSpareThreads     75

    ThreadsPerChild      25

    ThreadLimit          75

    MaxRequestsPerChild 0

    </IfModule>

    【參數說明】

    1.ServerLimit
    服務器允許配置的進程數上限。這個參數和ThreadLimit結合使用便決定了MaxClients所能設置的最大值。任何在重啟期間對這個參數的改變都將被忽略,但對MaxClients的修改卻會生效。

    2.ThreadLimit
    每個子進程可設置的線程數上限,這個參數決定了每個子進程可創建線程的數,即ThreadsPerChild的上限。任何在重啟期間對這個參數的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。默認值是"64".

    3.StartServers
    服務器啟動時建立的子進程數,默認值是"3"

    4.MinSpareThreads
    最小空閑線程數,默認值是75MPM將基于整個服務器監視空閑線程數。如果服務器中總的空閑線程數太少,子進程將產生新的空閑線程。

    5.MaxSpareThreads
    設置最大空閑線程數。默認值是250MPM將基于整個服務器監視空閑線程數。如果服務器中總的空閑線程數太多,子進程將殺死多余的空閑線程。MaxSpareThreads的取值范圍是有限制的,在Apache worker模式下是要求大于等于 MinSpareThreadsThreadsPerChild之和來自動修正你設置的值。

    6.MaxClients
    允許同時接收客戶端最大請求的數量(最大線程數量)。任何超過MaxClients限制的請求都將進入等候隊列。默認值是400,16 (ServerLimit)乘以25(ThreadsPerChild)。因此需要增加MaxClients的時候,你必須同時增加 ServerLimit的值。

    7.ThreadsPerChild
    每個子進程建立常駐的執行線程數。默認值是25。子進程在啟動時建立這些線程后就不再建立新的線程了。

    8.MaxRequestsPerChild
    設置每個子進程在其生存期內允許提供服務的最大請求數量。到達MaxRequestsPerChild的限制后,子進程將會結束。如果MaxRequestsPerChild"0",子進程將永遠不會結束。

    MaxRequestsPerChild設置成非零值有兩個好處:
    1.
    可以防止(偶然的)內存泄漏無限進行,從而耗盡內存。
    2.
    給進程一個有限壽命,從而有助于當服務器負載減輕的時候減少活動進程的數量。
    注意
    對于KeepAlive鏈接,只有第一個請求會被計數。事實上,它改變了每個子進程限制最大鏈接數量的行為。

    【工作原理介紹】:

    worker的工作原理是:先由主控制進程創建“StartServers”個子進程,每個子進程中含有“ThreadsPerChild”個線程,各個線程獨立地處理來自客戶端的請求。同Prefork一樣,為了不在請求到來時在去創建線程,MinSpareThreadsMaxSpareThreads決定了最少和最多空閑線程數;隨著負載逐漸增大,而現有子進程中的線程不能滿足負載時,主控進程將按照“ServerLimit”和“MaxClients”的限制去創建新進程,如果“ServerLimit”達到上限而ServerLimit* ThreadsPerChild <MaxClients時,那么主控進程將參考“ThreadLimit”的值去嘗試增加某個進程的線程,前提是ThreadLimit> ThreadsPerChild如果“ServerLimit”未達到上限而“MaxClients”達到上限,那么服務器將不采取任何行動。倘若負載逐漸減小,那么Apache服務器將根據實際情況去消減線程或進程。

    【小結】
       
    在worker模式下MinSpareThreads和MaxSpareThreads的最大缺省值分別是75和250。這兩個參數對Apache的性能影響并不大,可以按照實際情況做相應調節。 而ThreadsPerChild參數是最影響性能的一個,因為worker模式下所能同時處理的請求總數是由子進程總數與ThreadsPerChild之積來決定的。它的最大缺省值是64,如果負載較大,64也是不夠的。這時要顯式使用ThreadLimit指令,它的最大缺省值是20000。。注意,不要把這兩個值設得太高,如果超過系統的處理能力,會使系統很不穩定,這個值最好參考性能測試的結果來設,同時子進程總數與ThreadsPerChild之積應該略大于MaxClinets。

     

    三、配置靜態文件

    目前基于B/S結構的Web頁面有動態和靜態兩種形式,其中動態頁面需由服務器的解析器進行解析,通常還需連接數據庫,進行數據庫存取操作,最后形成HTML語言信息包反饋給瀏覽者;而靜態頁面,則無須解析,無須連接數據庫,直接反饋給客戶端就可以。  

    這里說的靜態文件就是指在服務器端無需進行任何處理,就可以直接反饋給瀏覽器的文件,例如:HTMLJSCSSJPGBMP等等。

    將應用系統中的靜態文件配置到Apache服務器上有幾大好處,首先從客戶角度來看Web頁面的響應時間提高了,其次從系統資源來看應用服務器能專心處理動態文件,所以充分發揮了它的效能,再次從系統穩定性來看Apache服務器屏蔽了所有靜態文件的請求,減輕了應用服務器的壓力從而降低了由大訪問量帶來宕機的風險。

    配置示例1

    Alias /images/ "/home/hrdc/images/"

    <Directory "/home/hrdc/images">

    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

    </Directory>

    #配置圖片請求映射,與CSS,JS的配置類似。

    <VirtualHost 192.64.108.2:8022>

    <IfModule mod_weblogic.c>

         WebLogicCluster 192.64.96.18:8018,192.64.96.11:8011

         MatchExpression /file/*

         MatchExpression *.jsp

         MatchExpression *.jsf

         MatchExpression *.rtf

         MatchExpression *.xls

         MatchExpression *.doc

        MatchExpression /console*

    </IfModule>

    </VirtualHost>

    #配置Webloig模塊中的參數。

    【關鍵參數說明】

    VirtualHost

    虛擬主機。

    【說明】

    在這個參數內可以模仿一個Web服務配置眾多參數,即在<VirtualHost></VirtualHost>中配置一組僅作用于特定虛擬主機的參數。

    示例

    <VirtualHost 192.64.182.53:8020>
    ServerAdmin   hrdc.zh@ccb.cn
    DocumentRoot  /home/hrdc
    ServerName    hrdc.ccb.cn
    ErrorLog logs/host.foo.com-error_log
    TransferLog logs/host.foo.com-access_log
    </VirtualHost>

    注意:每個虛擬主機必須對應不同的IP地址、端口或是不同的主機名。

    <VirtualHost>中定義的監聽地址只代表虛擬主機并不是指定Apache服務的監聽地址。指定Apache監聽地址的參數則是Listen

    IfModule

    根據指定的模塊是否啟用為條件來決定是否進行處理。

    【語法】

    <IfModule [!]module-file|module-identifier> ... </IfModule>

    【說明】

    在該參數中配置的表達式為真的時候才進行處理。如果為假,所有其包含的參數都將被忽略。

    <IfModule>段中的表達式可以為以下兩種方式之一來表達:

    ·         module

    ·         !module

    第一種情況表示,在<IfModule ></IfModule>之間的配置參數僅當module被載入后才被執行。此模塊可以是編譯時靜態鏈接的核心模塊或是使用LoadModule指令動態載入的模塊。第二種情況則表示,僅當module沒有載入時才執行參數內的配置處理。

    module可以是模塊的標識符或者是編譯模塊時的文件名。在上面的例子中,mod_weblogic.c就是編譯模塊時的文件名。

    注意:<IfModule>配置段是可以嵌套的,從而可以實現簡單的多模塊測試。

    【小結】

    現在再看一下“配置示例1”中關于Weblogic的配置,其中第一行是用于指定集群中托管服務器的地址。而下面的“MatchExpression”表示當URL匹配上后面的表達式時,Apache服務器會把該請求轉給Weblogic處理。從配置中可以看出如果有一個“http://192.23.108.2:8022/images/logon.jpg”這樣的請求,它是不會轉發到Weblogic集群上的。

    posted on 2009-09-22 10:50 xiachang88 閱讀(3806) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 性做久久久久免费看| 久久久久噜噜噜亚洲熟女综合| 亚洲AV无码片一区二区三区| 国产成人va亚洲电影| 国产AⅤ无码专区亚洲AV| 84pao强力永久免费高清| 亚洲高清一区二区三区电影| 亚洲国产人成中文幕一级二级| 香蕉免费一区二区三区| 亚洲人成网站免费播放| 亚洲线精品一区二区三区影音先锋| 18以下岁毛片在免费播放| 色噜噜狠狠色综合免费视频 | 亚洲熟女乱综合一区二区| 99在线观看精品免费99| 免费在线观看亚洲| 久久精品国产亚洲AV无码偷窥| 暖暖在线日本免费中文| 久久青草免费91线频观看不卡| 亚洲欧美国产国产一区二区三区 | 免费观看四虎精品成人| 91天堂素人精品系列全集亚洲| 国产三级免费电影| 亚洲免费在线观看视频| 国产精品九九久久免费视频| 亚洲男人的天堂网站| 亚洲午夜免费视频| MM131亚洲国产美女久久| 国产香蕉九九久久精品免费| 玖玖在线免费视频| jizz中国免费| 亚洲av无码成人影院一区| 亚洲美女精品视频| 亚洲精品无码久久久久去q | 四虎免费影院4hu永久免费| 久草视频在线免费| 久久精品国产这里是免费| 精品免费久久久久国产一区 | 国产L精品国产亚洲区久久| 永久免费视频v片www| 久久久久久国产a免费观看黄色大片 |