常用配置指令說明
1. ServerRoot:服務(wù)器的基礎(chǔ)目錄比吭,一般來說它將包含conf/和logs/子目錄,其它配置文件的相對路徑即基于此目錄卖怜。默認(rèn)為安裝目錄,不需更改阐枣。
語法:ServerRoot directory-path
如: ServerRoot "/usr/local/apache-2.2.6"
注意马靠,此指令中的路徑最后不要加 / 。
2. Listen:指定服務(wù)器監(jiān)聽的IP和端口蔼两。默認(rèn)情況下Apache會在所有IP地址上監(jiān)聽甩鳄。Listen是Apache2.0以后版本必須設(shè)置的指令,如果在配置文件中找不到這個指令额划,服務(wù)器將
無法啟動娩贷。
語法:Listen [IP-address:]portnumber [protocol]
Listen指令指定服務(wù)器在那個端口或地址和端口的組合上監(jiān)聽接入請求。如果只指定一個端口锁孟,服務(wù)器將在所有地址上監(jiān)聽該端口彬祖。如果指定了地址和端口的組合茁瘦,服務(wù)器將在指
定地址的指定端口上監(jiān)聽〈⑿Γ可選的protocol參數(shù)在大多數(shù)情況下并不需要甜熔,若未指定該參數(shù),則將為443端口使用默認(rèn)的https 協(xié)議突倍,為其它端口使用http協(xié)議腔稀。
使用多個Listen指令可以指定多個不同的監(jiān)聽端口和/或地址端口組合。
默認(rèn)為:Listen 80
如果讓服務(wù)器接受80和8080端口上請求羽历,可以這樣設(shè)置:
Listen 80
Listen 8080
如果讓服務(wù)器在兩個確定的地址端口組合上接受請求焊虏,可以這樣設(shè)置:
Listen 192.168.2.1:80
Listen 192.168.2.2:8080
如果使用IPV6地址,必須用方括號把IPV6地址括起來:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
3. LoadModule:加載特定的DSO模塊秕磷。Apache默認(rèn)將已編譯的DSO模塊存放于4.1目錄結(jié)構(gòu)小節(jié)中所示的動態(tài)加載模塊目錄中诵闭。
語法:LoadModule module filename
如:LoadModule rewrite_module modules/mod_rewrite.so
如果filename使用相對路徑,則路徑是相對于ServerRoot所指示的相對路徑澎嚣。
Apache配置文件默認(rèn)加載所有已編譯的DSO模塊疏尿,筆者建議只加載如下模塊:authn_file、authn_default易桃、 authz_host褥琐、authz_user、authz_default晤郑、auth_basic敌呈、dir、alias
造寝、filter驱富、speling、 log_config匹舞、env褐鸥、vhost_alias、setenvif赐稽、mime叫榕、negotiation、rewrite姊舵、deflate晰绎、 expires、headers括丁、cache荞下、file-cache、disk-cache、mem-cache
尖昏。
4. User:設(shè)置實際提供服務(wù)的子進(jìn)程的用戶仰税。為了使用這個指令,服務(wù)器必須以root身份啟動和初始化抽诉。如果你以非root身份啟動服務(wù)器陨簇,子進(jìn)程將不能夠切換至非特權(quán)用戶,并
繼續(xù)以啟動服務(wù)器的原始用戶身份運行迹淌。如果確實以root用戶啟動了服務(wù)器河绽,那么父進(jìn)程將仍然以root身份運行。
用于運行子進(jìn)程的用戶必須是一個沒有特權(quán)的用戶唉窃,這樣才能保證子進(jìn)程無權(quán)訪問那些不想為外界所知的文件耙饰,同樣的,該用戶亦需沒有執(zhí)行那些不應(yīng)當(dāng)被外界執(zhí)行的程序的權(quán)限
纹份。強(qiáng)烈建議專門為Apache子進(jìn)程建立一個單獨的用戶和組苟跪。一些管理員使用nobody用戶,但是這并不能總是符合要求矮嫉,因為可能有其他程序也在使用這個用戶。
例:User daemon
5. Group:設(shè)置提供服務(wù)的Apache子進(jìn)程運行時的用戶組牍疏。為了使用這個指令蠢笋,Apache必須以root初始化啟動,否則在切換用戶組時會失敗鳞陨,并繼續(xù)以初始化啟動時的用戶組運行
昨寞。
例:Group daemon
6. ServerAdmin:設(shè)置在所有返回給客戶端的錯誤信息中包含的管理員郵件地址。
語法:ServerAdmin email-address|URL
如果httpd不能將提供的參數(shù)識別為URL厦滤,它就會假定它是一個email-address 援岩,并在超連接中用在mailto:后面。推薦使用一個Email地址掏导,因為許多CGI腳本是這樣認(rèn)為的享怀。如果你
確實想使用URL,一定要保證指向一個你能夠控制的服務(wù)器趟咆,否則用戶將無法確保一定可以和你取得聯(lián)系添瓷。
7. ServerName:設(shè)置服務(wù)器用于辨識自己的主機(jī)名和端口號。
語法:ServerName [scheme://]fully-qualified-domain-name[:port]
可選的'scheme://'前綴僅在2.2.3以后的版本中可用值纱,用于在代理之后或離線設(shè)備上也能正確的檢測規(guī)范化的服務(wù)器URL鳞贷。
當(dāng)沒有指定ServerName時,服務(wù)器會嘗試對IP地址進(jìn)行反向查詢來推斷主機(jī)名虐唠。如果在ServerName中沒有指定端口號搀愧,服務(wù)器會使用接受請求的那個端口。
為了加強(qiáng)可靠性和可預(yù)測性,建議使用ServerName顯式的指定一個主機(jī)名和端口號咱筛。
如果使用的是基于域名的虛擬主機(jī)搓幌,在<VirtualHost>段中的ServerName將是為了匹配這個虛擬主機(jī),在"Host:"請求頭中必須出現(xiàn)的主機(jī)名眷蚓。
8. DocumentRoot:設(shè)置Web文檔根目錄鼻种。
語法:DocumentRoot directory-path
在沒有使用類似Alias這樣的指令的情況下,服務(wù)器會將請求中的URL附加到DocumentRoot后面以構(gòu)成指向文檔的路徑沙热。
如果directory-path不是絕對路徑叉钥,則被假定為是相對于ServerRoot的路徑。
指定DocumentRoot時不應(yīng)包括最后的"/"篙贸。
9. <Directory>:<Directory>和</Directory>用于封裝一組指令投队,使之僅對某個目錄及其子目錄生效。
語法:<Directory Directory-path> ... </Directory>
Directory-path可以是一個目錄的完整路徑爵川,或是包含了Unix shell匹配語法的通配符字符串敷鸦。在通配符字符串中,"?"匹配任何單個的字符寝贡,""匹配任何字符序列扒披。也可以使*
用"[]"來確定字符范圍。在"~" 字符之后也可以使用正則表達(dá)式圃泡。
如果有多個(非正則表達(dá)式)<Directory>配置段符合包含某文檔的目錄(或其父目錄)碟案,那么指令將以短目錄優(yōu)先的規(guī)則進(jìn)行應(yīng)用,并包含.htaccess文件中的指令颇蜡。
正則表達(dá)式將在所有普通配置段之后予以考慮价说。所有的正則表達(dá)式將根據(jù)它們出現(xiàn)在配置文件中的順序進(jìn)行應(yīng)用。
<Directory>指令不可被嵌套使用风秤,也不能出現(xiàn)在<Limit>或<LimitExcept>配置段中鳖目。
10. <Files>:提供基于文件名的訪問控制,類似于<Directory>和<Location>指令缤弦。
語法:<Files filename> ... </Files>
filename參數(shù)應(yīng)當(dāng)是一個文件名或是一個包含通配符的字符串领迈,其中"?"匹配任何單個字符,""匹配任何字符串序列碍沐。在"~"字符之后可以使用正則表達(dá)式惦费。*
在此配置段中定義的指令將作用于其基本名稱(不是完整的路徑)與指定的文件名相符的對象。<Files>段將根據(jù)它們在配置文件中出現(xiàn)的順序被處理:在<Directory>段和.htaccess
文件被處理之后抢韭,但在<Location>段之前薪贫。<Files>能嵌入到<Directory>段中以限制它們作用的文件系統(tǒng)范圍,也可用于.htaccess文件當(dāng)中刻恭,以允許用戶在文件層面上控制對它們
自己文件的訪問瞧省。
11. <IfModule>:封裝根據(jù)指定的模塊是否啟用而決定是否生效的指令扯夭。
語法:<IfModule [!]module-file|module-identifier> ... </IfModule>
module-file是指編譯模塊時的文件名,比如mod_rewrite.c 鞍匾。
module-identifier是指模塊的標(biāo)識符交洗,比如mod_rewrite 。
在<IfModule>配置段中的指令僅當(dāng)測試結(jié)果為真的時候才進(jìn)行處理橡淑,否則所有其間的指令都將被忽略构拳。
12. Options:控制在特定目錄中將使用哪些服務(wù)器特性
語法:Options [+|-]option [[+|-]option] ...
option可以為None,不啟用任何額外特性梁棠,或者下面選項中的一個或多個:
All 除MultiViews之外的所有特性置森,這是默認(rèn)設(shè)置。
ExecCGI 允許使用mod_cgi執(zhí)行CGI腳本符糊。
FollowSymLinks 服務(wù)器允許在此目錄中使用符號連接凫海,如果此配置位于<Location>配置段中,則會被忽略男娄。
Includes 允許使用mod_include提供的服務(wù)器端包含行贪。
IncludesNOEXEC 允許服務(wù)器端包含,但禁用"#exec cmd"和"#exec cgi"模闲,但仍可以從ScriptAlias目錄使用"#include virtual"虛擬CGI腳本建瘫。
Indexes 如果一個映射到目錄的URL被請求,而此目錄中又沒有DirectoryIndex(例如:index.html)尸折,那么服務(wù)器會返回由mod_autoindex生成的一個格式化后的目錄列表啰脚。
MultiViews 允許使用mod_negotiation提供內(nèi)容協(xié)商的"多重視圖"(MultiViews)。
SymLinksIfOwnerMatch 服務(wù)器僅在符號連接與其目的目錄或文件的擁有者具有相同的uid時才使用它翁授。 如果此配置出現(xiàn)在<Location>配置段中拣播,則將被忽略晾咪。
一般來說收擦,如果一個目錄被多次設(shè)置了Options ,則最特殊的一個會被完全接受(其它的被忽略)谍倦,而各個可選項的設(shè)定彼此并不融合塞赂。然而,如果所有作用于Options指令的可選項
前都加有"+" 或"-"符號昼蛀,此可選項將被合并宴猾。所有前面加有"+"號的可選項將強(qiáng)制覆蓋當(dāng)前的可選項設(shè)置,而所有前面有"-"號的可選項將強(qiáng)制從當(dāng)前可選項設(shè)置中去除叼旋。
13. AllowOverride:確定允許存在于.htaccess文件中的指令類型仇哆。
語法:AllowOverride All|None|directive-type [directive-type] ...
如果此指令被設(shè)置為None ,那么.htaccess文件將被完全忽略夫植。事實上讹剔,服務(wù)器根本不會讀取.htaccess文件油讯。
當(dāng)此指令設(shè)置為All時,所有具有".htaccess"作用域的指令都允許出現(xiàn)在.htaccess文件中延欠。
directive-type可以是下列各組指令之一:
AuthConfig 允許使用與認(rèn)證授權(quán)相關(guān)的指令
FileInfo 允許使用控制文檔類型的指令陌兑、控制文檔元數(shù)據(jù)的指令、mod_rewrite中的指令由捎、mod_actions中的Action指令
Indexes 允許使用控制目錄索引的指令
Limit 允許使用控制主機(jī)訪問的指令
Options[=Option,...] 允許使用控制指定目錄功能的指令(Options和XBitHack)兔综。可以在等號后面附加一個逗號分隔的(無空格的)Options選項列表狞玛,用來控制允許Options指令
使用哪些選項软驰。
AllowOverride僅在不包含正則表達(dá)式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是無效的为居。
Order:控制默認(rèn)的訪問狀態(tài)與Allow和Deny指令生效的順序碌宴。
Ordering取值范圍是以下幾種范例之一:
Deny,Allow Deny指令在Allow指令之前被評估。默認(rèn)允許所有訪問蒙畴。任何不匹配Deny指令或者匹配Allow指令的客戶都被允許訪問贰镣。
Allow,Deny Allow指令在Deny指令之前被評估。默認(rèn)拒絕所有訪問膳凝。任何不匹配Allow指令或者匹配Deny指令的客戶都將被禁止訪問碑隆。
Mutual-failure 只有出現(xiàn)在Allow列表并且不出現(xiàn)在Deny列表中的主機(jī)才被允許訪問。這種順序與"Order Allow,Deny"具有同樣效果蹬音,不贊成使用上煤。
關(guān)鍵字只能用逗號分隔,它們之間不能有空格著淆,在所有情況下每個Allow和Deny指令語句都將被評估劫狠。
Allow:控制哪些主機(jī)可以訪問服務(wù)器的該區(qū)域∮啦浚可以根據(jù)主機(jī)名独泞、IP地址、 IP地址范圍或其他環(huán)境變量中捕獲的客戶端請求特性進(jìn)行控制苔埋。
語法:Allow from all|host|env=env-variable [host|env=env-variable] ...
這個指令的第一個參數(shù)總是"from"懦砂,隨后的參數(shù)可以有三種不同形式:如果指定"Allow from all",則允許所有主機(jī)訪問组橄,按照下述Deny和Order指令的配置荞膘;若要只允許特定的主
機(jī)或主機(jī)群訪問服務(wù)器,host可以用下面任何一種格式來指定:一個(部分)域名玉工、完整的IP地址羽资、部分IP地址、網(wǎng)絡(luò)/掩碼遵班、網(wǎng)絡(luò)/nnn無類別域間路由規(guī)格屠升;第三種參數(shù)格式允許
對服務(wù)器的訪問由環(huán)境變量的一個擴(kuò)展指定瞄勾,指定"Allow from env=env-variable"時,如果環(huán)境變量env-variable存在則訪問被允許弥激,使用由mod_setenvif提供的指令进陡,服務(wù)器用
一種基于客戶端請求的彈性方式提供了設(shè)置環(huán)境變量的能力。因此微服,這條指令可以用于允許基于像User-Agent(瀏覽器類型)趾疚、Referer或其他 HTTP請求頭字段的訪問。
Deny:控制哪些主機(jī)被禁止訪問服務(wù)器的該區(qū)域以蕴〔诼螅可以根據(jù)主機(jī)名、IP地址丛肮、 IP地址范圍或其他環(huán)境變量中捕獲的客戶端請求特性進(jìn)行控制赡磅。
語法:Deny from all|host|env=env-variable [host|env=env-variable] ...
此指令的參數(shù)設(shè)置和Allow指令完全相同。
14. DirectoryIndex:當(dāng)客戶端請求一個目錄時尋找的資源列表宝与。
語法:DirectoryIndex Local-url [Local-url] ...
Local-url(%已解碼的)是一個相對于被請求目錄的文檔的URL(通常是那個目錄中的一個文件)焚廊。可以指定多個URL习劫,服務(wù)器將返回最先找到的那一個咆瘟,比如:
DirectoryIndex index.html index.php
15. ErrorLog:指定當(dāng)服務(wù)器遇到錯誤時記錄錯誤日志的文件。
語法:ErrorLog file-path|syslog[:facility]
如果file-path不是一個以斜杠(/)開頭的絕對路徑诽里,那么將被認(rèn)為是一個相對于ServerRoot的相對路徑袒餐;如果file-path以一個管道符號(|)開頭,那么會為它指定一個命令來處理
錯誤日志谤狡,如 ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/%w/errors_log" 灸眼。
如果系統(tǒng)支持,使用"syslog"替代文件名將通過 syslogd(8)來記載日志墓懂。默認(rèn)將使用系統(tǒng)日志機(jī)制local7 焰宣,但您可以用"syslog:facility"語法來覆蓋這個設(shè)置,其中拒贱,facility
的取值為syslog(1)中記載的任何一個名字宛徊。
16. LogLevel:用于調(diào)整記錄在錯誤日志中的信息的詳細(xì)程度佛嬉。
語法:LogLevel level
可以選擇下列l(wèi)evel逻澳,依照重要性降序排列:
emerg 緊急(系統(tǒng)無法使用)
alert 必須立即采取措施
crit 致命情況
error 錯誤情況
warn 警告情況
notice 一般重要情況
info 普通信息
debug 調(diào)試信息
當(dāng)指定了某個級別時,所有級別高于它的信息也會被同時記錄暖呕。比如斜做,指定 LogLevel info ,則所有notice和warn級別的信息也會被記錄湾揽。建議至少使用crit級別瓤逼。
當(dāng)錯誤日志是一個單獨分開的正式文件的時候笼吟,notice級別的消息總是會被記錄下來,而不能被屏蔽霸旗。但是贷帮,當(dāng)使用syslog來記錄時就沒有這個問題。
17. LogFormat:定義訪問日志的記錄格式诱告。
語法:LogFormat format|nickname [nickname]
LogFormat指令可以使用兩種定義格式中的一種撵枢。
在第一種格式中,指令只帶一個參數(shù)精居,以定義后續(xù)的TransferLog指令定義的日志格式锄禽。另外它也可以通過下述的方法使用nickname來引用某個之前的LogFormat定義的日志格式。
第二種定義LogFormat指令的格式中靴姿,將一個直接的format和一個nickname聯(lián)系起來沃但。這樣在后續(xù)的LogFormat或 CustomLog指令中,就不用一再重復(fù)整個冗長的格式串佛吓。定義別名
的LogFormat指令僅僅用來定義一個nickname 宵晚,而不做其它任何事情,也就是說维雇,它只是定義了這個別名坝疼,它既沒有實際應(yīng)用這個別名,也不是把它設(shè)為默認(rèn)的格式谆沃。因此钝凶,它不
會影響后續(xù)的 TransferLog指令。另外唁影,LogFormat不能用一個別名來定義另一個別名耕陷。nickname不能包含百分號(%)。
關(guān)于format的格式据沈,請參見Apache2.2官方文檔中的自定義日志格式小節(jié)哟沫。
18. CustomLog:設(shè)定日志的文件名和格式。
語法:CustomLog file|pipe format|nickname [env=[!]environment-variable]
第一個參數(shù)指定了日志記錄的位置锌介,可以使用以下兩種方式來設(shè)定:
file 相對于ServerRoot的日志文件名嗜诀。
pipe 管道符"|"后面緊跟著一個把日志輸出當(dāng)作標(biāo)準(zhǔn)輸入的處理程序路徑勤众。
第二個參數(shù)指定了寫入日志文件的內(nèi)容绵估。它既可以是由前面的LogFormat指令定義的nickname ,也可以是直接按Apache2.2官方文檔中的自定義日志格式小節(jié)所描述的規(guī)則定義的
format字符串亲族。
第三個參數(shù)是可選的崔慧,它根據(jù)服務(wù)器上特定的環(huán)境變量是否被設(shè)置來決定是否對某一特定的請求進(jìn)行日志記錄拂蝎。如果這個特定的環(huán)境變量被設(shè)置(或者在"env=!name"的情況下未被
設(shè)置),那么這個請求將被記錄惶室∥伦裕可以使用mod_setenvif和/或mod_rewrite模塊來為每個請求設(shè)置環(huán)境變量玄货。
19. TransferLog:指定日志文件的位置。
語法:TransferLog file|pipe
本指令除不允許直接定義日志格式或根據(jù)條件進(jìn)行日志記錄外悼泌,與CustomLog指令有完全相同的參數(shù)和功能松捉。實際應(yīng)用中,日志的格式是由最近的非別名定義的LogFormat指令指定
馆里。如果沒有定義任何日志格式惩坑,則使用通用日志格式。
20. Alias:映射URL到文件系統(tǒng)的特定區(qū)域也拜。
語法:Alias URL-path file-path|directory-path
Alias指令使文檔可以被存儲在DocumentRoot以外的本地文件系統(tǒng)中以舒。以(%已解碼的)url-path路徑開頭的URL可以被映射到以directory-path開頭的本地文件。
如果對在DocumentRoot之外的某個目錄建立了一個Alias 慢哈,則可能需要通過<Directory>段明確的對目標(biāo)目錄設(shè)定訪問權(quán)限蔓钟。
21.ScriptAlias:映射一個URL到文件系統(tǒng)并視之為CGI腳本目錄。
語法:ScriptAlias URL-path file-path|directory-path
ScriptAlias指令的行為與Alias指令相同卵贱,但同時它又標(biāo)明此目錄中含有應(yīng)該由cgi-script處理器處理的CGI腳本滥沫。以URL-path開頭的(%已解碼的)的URL會被映射到由第二個參數(shù)指
定的具有完整路徑名的本地文件系統(tǒng)中的腳本。
ScriptSock:在以線程式MPM(worker)運行的Apache中設(shè)置用來與CGI守護(hù)進(jìn)程通信的套接字文件名前綴(其后附加父進(jìn)程 PID組成完整的文件名)键俱。這個套接字將會用啟動Apache服
務(wù)器的父進(jìn)程用戶權(quán)限(通常是root)打開兰绣。為了維護(hù)與CGI腳本通訊的安全性,不允許其他用戶擁有寫入套接字所在目錄的權(quán)限是很重要的编振。
22. DefaultType:在服務(wù)器無法由其他方法確定內(nèi)容類型時缀辩,發(fā)送的默認(rèn)MIME內(nèi)容類型。
語法:DefaultType MIME-type
默認(rèn):DefaultType text/plain
23. AddType:在給定的文件擴(kuò)展名與特定的內(nèi)容類型之間建立映射關(guān)系踪央。
語法:AddType MIME-type extension [extension] ...
MIME-type指明了包含extension擴(kuò)展名的文件的媒體類型臀玄。這個映射關(guān)系會添加在所有有效的映射關(guān)系上,并覆蓋所有相同的extension擴(kuò)展名映射畅蹂。
extension參數(shù)是不區(qū)分大小的健无,并且可以帶或不帶前導(dǎo)點。
24. ErrorDocument:批示當(dāng)遇到錯誤的時候服務(wù)器將給客戶端什么樣的應(yīng)答液斜。
語法:ErrorDocument error-code document
error-code 服務(wù)器返回的錯誤代碼
document 可以由一個斜杠(/)開頭來指示一個本地URL(相對于DocumentRoot)累贤,或是提供一個能被客戶端解釋的完整的URL。此外還能提供一個可以被瀏覽器顯示的消息少漆。比如:
ErrorDocument 500http://www.entage.net/err500.html
ErrorDocument 404 /errors/bad_urls.html
ErrorDocument 403 "Sorry can't allow you access today"
25. EnableMMAP:指示httpd在遞送中如果需要讀取一個文件的內(nèi)容臼膏,它是否可以使用內(nèi)存映射。
語法:EnableMMAP On|Off
當(dāng)處理一個需要訪問文件中的數(shù)據(jù)的請求時检疫,比如說當(dāng)遞送一個使用mod_include進(jìn)行服務(wù)器端分析的文件時讶请,如果操作系統(tǒng)支持祷嘶,Apache將默認(rèn)使用內(nèi)存映射屎媳。
這種內(nèi)存映射有時會帶來性能的提高夺溢,但在某些情況下,您可能會需要禁用內(nèi)存映射以避免一些操作系統(tǒng)的問題:
在一些多處理器的系統(tǒng)上烛谊,內(nèi)存映射會減低一些httpd的性能风响;
在掛載了NFS的DocumentRoot上,若已經(jīng)將一個文件進(jìn)行了內(nèi)存映射丹禀,則刪除或截斷這個文件會造成httpd因為分段故障而崩潰状勤。
在可能遇到這些問題的服務(wù)器配置過程中,應(yīng)當(dāng)使用下面的命令來禁用內(nèi)存映射:
26. EnableMMAP Off
對于掛載了NFS的文件夾双泪,可以單獨在<directory>段中指定禁用內(nèi)存映射:
EnableMMAP Off
27. EnableSendfile:控制httpd是否可以使用操作系統(tǒng)內(nèi)核的sendfile支持來將文件發(fā)送到客戶端持搜。
默認(rèn)情況下,當(dāng)處理一個請求并不需要訪問文件內(nèi)部的數(shù)據(jù)時(比如發(fā)送一個靜態(tài)的文件內(nèi)容)焙矛,如果操作系統(tǒng)支持葫盼,Apache將使用sendfile將文件內(nèi)容直接發(fā)送到客戶端而并不讀
取文件。
這個sendfile機(jī)制避免了分開的讀和寫操作以及緩沖區(qū)分配村斟,但是在一些平臺或者一些文件系統(tǒng)上贫导,最好禁止這個特性來避免一些問題:
一些平臺可能會有編譯系統(tǒng)檢測不到的有缺陷的sendfile支持,特別是將在其他平臺上使用交叉編譯得到的二進(jìn)制文件運行于當(dāng)前對sendfile支持有缺陷的平臺時蟆盹;
在Linux上啟用IPv6時孩灯,使用sendfile將會觸發(fā)某些網(wǎng)卡上的TCP校驗和卸載bug;
當(dāng)Linux運行在Itanium處理器上的時候逾滥,sendfile可能無法處理大于2GB的文件峰档;
對于一個通過網(wǎng)絡(luò)掛載了NFS文件系統(tǒng)的DocumentRoot (比如:NFS或SMB),內(nèi)核可能無法可靠的通過自己的緩沖區(qū)服務(wù)于網(wǎng)絡(luò)文件寨昙。
如果出現(xiàn)以上情況面哥,你應(yīng)當(dāng)禁用sendfile :
EnableSendfile Off
針對NFS或SMB,可以單獨在<directory>段中指定禁用:
EnableSendfile Off
28. include:在服務(wù)器配置文件中包含其它配置文件毅待。
語法:Include file-path|directory-path
Shell風(fēng)格(fnmatch())的通配符可以用于按照字母順序一次包含多個文件尚卫。另外,如果Include指向了一個目錄而不是一個文件尸红,Apache將讀入該目錄及其子目錄下的所有文件吱涉,并
依照字母順序?qū)⑦@些文件作為配置文件進(jìn)行解析。但是并不推薦這么做外里,因為偶爾會有臨時文件在這個目錄中生成怎爵,從而導(dǎo)致httpd啟動失敗。
文件的路徑可以是一個完整的絕對路徑(以一個斜杠開頭)盅蝗,或是相對于ServerRoot目錄的相對路徑鳖链。
29. 設(shè)置動態(tài)加載的DSO模塊
#如果需要提供基于文本文件的認(rèn)證,加載此模塊,否則注釋掉
LoadModule authn_file_module modules/mod_authn_file.so
#如果需要提供基于DBM文件的認(rèn)證,加載此模塊,否則注釋掉
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#如果需要提供匿名用戶認(rèn)證,加載此模塊,否則注釋掉
#LoadModule authn_anon_module modules/mod_authn_anon.so
#如果需要提供基于SQL數(shù)據(jù)庫的認(rèn)證,加載此模塊,否則注釋掉
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#如果需要在未正確配置認(rèn)證模塊的情況下簡單拒絕一切認(rèn)證信息,加載此模塊,否則注釋掉
LoadModule authn_default_module modules/mod_authn_default.so
#此模塊提供基于主機(jī)名、IP地址芙委、請求特征的訪問控制,Allow逞敷、Deny指令需要,推薦加載。
LoadModule authz_host_module modules/mod_authz_host.so
#如果需要使用純文本文件為組提供授權(quán)支持,加載此模塊,否則注釋掉
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#如果需要提供基于每個用戶的授權(quán)支持,加載此模塊,否則注釋掉
LoadModule authz_user_module modules/mod_authz_user.so
#如果需要使用DBM文件為組提供授權(quán)支持,加載此模塊,否則注釋掉
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#如果需要基于文件的所有者進(jìn)行授權(quán),加載此模塊,否則注釋掉
#LoadModule authz_owner_module modules/mod_authz_owner.so
#如果需要在未正確配置授權(quán)支持模塊的情況下簡單拒絕一切授權(quán)請求,加載此模塊,否則注釋掉
LoadModule authz_default_module modules/mod_authz_default.so
#如果需要提供基本的HTTP認(rèn)證,加載此模塊,否則注釋掉,此模塊至少需要同時加載一個認(rèn)證支持模塊和一個授權(quán)支持模塊
LoadModule auth_basic_module modules/mod_auth_basic.so
##如果需要提供HTTP MD5摘要認(rèn)證,加載此模塊,否則注釋掉,此模塊至少需要同時加載一個認(rèn)證支持模塊和一個授權(quán)支持模塊
#LoadModule auth_digest_module modules/mod_auth_digest.so
#此模塊提供文件描述符緩存支持,從而提高Apache性能,推薦加載,但請小心使用
LoadModule file_cache_module modules/mod_file_cache.so
#此模塊提供基于URI鍵的內(nèi)容動態(tài)緩存(內(nèi)存或磁盤),從而提高Apache性能,必須與mod_disk_cache/mod_mem_cache同時使用,推薦加載
LoadModule cache_module modules/mod_cache.so
#此模塊為mod_cache提供基于磁盤的緩存管理,推薦加載
LoadModule disk_cache_module modules/mod_disk_cache.so
#此模塊為mod_cache提供基于內(nèi)存的緩存管理,推薦加載
LoadModule mem_cache_module modules/mod_mem_cache.so
#如果需要管理SQL數(shù)據(jù)庫連接灌侣,為需要數(shù)據(jù)庫功能的模塊提供支持,加載此模塊,否則注釋掉(推薦)
#LoadModule dbd_module modules/mod_dbd.so
#此模塊將所有I/O操作轉(zhuǎn)儲到錯誤日志中,會導(dǎo)致在日志中寫入及其海量的數(shù)據(jù),只建議在發(fā)現(xiàn)問題并進(jìn)行調(diào)試的時候使用
#LoadModule dumpio_module modules/mod_dumpio.so
#如果需要使用外部程序作為過濾器,加載此模塊(不推薦),否則注釋掉
#LoadModule ext_filter_module modules/mod_ext_filter.so
#如果需要實現(xiàn)服務(wù)端包含文檔(SSI)處理,加載此模塊(不推薦),否則注釋掉
#LoadModule include_module modules/mod_include.so
#如果需要根據(jù)上下文實際情況對輸出過濾器進(jìn)行動態(tài)配置,加載此模塊,否則注釋掉
LoadModule filter_module modules/mod_filter.so
#如果需要服務(wù)器在將輸出內(nèi)容發(fā)送到客戶端以前進(jìn)行壓縮以節(jié)約帶寬,加載此模塊(推薦),否則注釋掉
LoadModule deflate_module modules/mod_deflate.so
##如果需要記錄日志和定制日志文件格式,加載此模塊(推薦),否則注釋掉
LoadModule log_config_module modules/mod_log_config.so
#如果需要對每個請求的輸入/輸出字節(jié)數(shù)以及HTTP頭進(jìn)行日志記錄,加載此模塊,否則注釋掉
#LoadModule logio_module modules/mod_logio.so
#如果允許Apache修改或清除傳送到CGI腳本和SSI頁面的環(huán)境變量,加載此模塊,否則注釋掉
LoadModule env_module modules/mod_env.so
#如果允許通過配置文件控制HTTP的"Expires:"和"Cache-Control:"頭內(nèi)容,加載此模塊(推薦),否則注釋掉
LoadModule expires_module modules/mod_expires.so
#如果允許通過配置文件控制任意的HTTP請求和應(yīng)答頭信息,加載此模塊,否則注釋掉
LoadModule headers_module modules/mod_headers.so
#如果需要實現(xiàn)RFC1413規(guī)定的ident查找,加載此模塊(不推薦),否則注釋掉
#LoadModule ident_module modules/mod_ident.so
#如果需要根據(jù)客戶端請求頭字段設(shè)置環(huán)境變量,加載此模塊,否則注釋掉
LoadModule setenvif_module modules/mod_setenvif.so
#此模塊是mod_proxy的擴(kuò)展,提供Apache JServ Protocol支持,只在必要時加載
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#此模塊是mod_proxy的擴(kuò)展,提供負(fù)載均衡支持,只在必要時加載
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#如果需要根據(jù)文件擴(kuò)展名決定應(yīng)答的行為(處理器/過濾器)和內(nèi)容(MIME類型/語言/字符集/編碼),加載此模塊,否則注釋掉
LoadModule mime_module modules/mod_mime.so
#如果允許Apache提供DAV協(xié)議支持,加載此模塊,否則注釋掉
#LoadModule dav_module modules/mod_dav.so
#此模塊生成描述服務(wù)器狀態(tài)的Web頁面,只建議在追蹤服務(wù)器性能和問題時加載
#LoadModule status_module modules/mod_status.so
#如果需要自動對目錄中的內(nèi)容生成列表(類似于"ls"或"dir"命令),加載此模塊(會帶來安全問題,不推薦),否則注釋掉
#LoadModule autoindex_module modules/mod_autoindex.so
#如果需要服務(wù)器發(fā)送自己包含HTTP頭內(nèi)容的文件,加載此模塊,否則注釋掉
#LoadModule asis_module modules/mod_asis.so
#如果需要生成Apache配置情況的Web頁面,加載此模塊(會帶來安全問題,不推薦),否則注釋掉
#LoadModule info_module modules/mod_info.so
#如果需要在非線程型MPM(prefork)上提供對CGI腳本執(zhí)行的支持,加載此模塊,否則注釋掉
#LoadModule cgi_module modules/mod_cgi.so
#此模塊在線程型MPM(worker)上用一個外部CGI守護(hù)進(jìn)程執(zhí)行CGI腳本,如果正在多線程模式下使用CGI程序,推薦替換mod_cgi加載,否則注釋掉
#LoadModule cgid_module modules/mod_cgid.so
#此模塊為mod_dav訪問服務(wù)器上的文件系統(tǒng)提供支持,如果加載mod_dav,則也應(yīng)加載此模塊,否則注釋掉
#LoadModule dav_fs_module modules/mod_dav_fs.so
#如果需要提供大批量虛擬主機(jī)的動態(tài)配置支持,加載此模塊,否則注釋掉
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#如果需要提供內(nèi)容協(xié)商支持(從幾個有效文檔中選擇一個最匹配客戶端要求的文檔),加載此模塊(推薦),否則注釋掉
LoadModule negotiation_module modules/mod_negotiation.so
#如果需要指定目錄索引文件以及為目錄提供"尾斜杠"重定向,加載此模塊(推薦),否則注釋掉
LoadModule dir_module modules/mod_dir.so
#如果需要處理服務(wù)器端圖像映射,加載此模塊,否則注釋掉
#LoadModule imagemap_module modules/mod_imagemap.so
#如果需要針對特定的媒體類型或請求方法執(zhí)行CGI腳本,加載此模塊,否則注釋掉
#LoadModule actions_module modules/mod_actions.so
#如果希望服務(wù)器自動糾正URL中的拼寫錯誤,加載此模塊(推薦),否則注釋掉
LoadModule speling_module modules/mod_speling.so
#如果允許在URL中通過"/~username"形式從用戶自己的主目錄中提供頁面,加載此模塊,否則注釋掉
#LoadModule userdir_module modules/mod_userdir.so
#此模塊提供從文件系統(tǒng)的不同部分到文檔樹的映射和URL重定向,推薦加載
LoadModule alias_module modules/mod_alias.so
#如果需要基于一定規(guī)則實時重寫URL請求,加載此模塊(推薦),否則注釋掉
LoadModule rewrite_module modules/mod_rewrite.so
DocumentRoot "/usr/local/apache-2.2.6/htdocs"
#設(shè)置WEB文檔根目錄的默認(rèn)屬性
<Directory />
**? ? Options FollowSymLinks**
**? ? AllowOverride None**
**? ? Order deny,allow**
**? ? Deny from all**
</Directory>
#設(shè)置DocumentRoot指定目錄的屬性
<Directory "/usr/local/apache-2.2.6/htdocs">
**? ? Options FollowSymLinks**
**? ? AllowOverride None**
**? ? Order allow,deny**
**? ? Allow from all**
</Directory>
#設(shè)置默認(rèn)目錄資源列表文件
<IfModule dir_module>
**? ? DirectoryIndex index.html**
</IfModule>
#拒絕對.ht開頭文件的訪問,以保護(hù).htaccess文件
<FilesMatch "^.ht">
**? ? Order allow,deny**
**? ? Deny from all**
**? ? Satisfy All**
</FilesMatch>
<IfModule log_config_module>
#定義訪問日志的格式
**? ? LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined**
**? ? LogFormat "%h %l %u %t "%r" %>s %b" common**
**? ? <IfModule logio_module>**
**? ? ? LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio**
**? ? </IfModule>**
#指定訪問日志及使用的格式
**? ? CustomLog logs/access_log combined**
</IfModule>
#設(shè)定默認(rèn)CGI腳本目錄及別名
ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"
#在以線程式MPM(worker)運行的Apache中設(shè)置用來與CGI守護(hù)進(jìn)程通信的套接字文件名前綴
<IfModule cgid_module>
**? ? Scriptsock logs/cgisock**
</IfModule>
#設(shè)定默認(rèn)CGI腳本目錄的屬性
<Directory "/usr/local/apache-2.2.6/cgi-bin">
**? ? AllowOverride None**
**? ? Options None**
**? ? Order allow,deny**
**? ? Allow from all**
</Directory>
#設(shè)定默認(rèn)MIME內(nèi)容類型
DefaultType text/plain
<IfModule mime_module>
##指定MIME類型映射文件
**? ? TypesConfig conf/mime.types**
#增加.Z .tgz的類型映射
**? ? AddType application/x-compress .Z**
**? ? AddType application/x-gzip .gz .tgz**
</IfModule>
#啟用內(nèi)存映射
EnableMMAP on
##使用操作系統(tǒng)內(nèi)核的sendfile支持來將文件發(fā)送到客戶端
EnableSendfile on
#指定多路處理模塊(MPM)配置文件并將其附加到主配置文件
Include conf/extra/httpd-mpm.conf
#指定多語言錯誤應(yīng)答配置文件并將其附加到主配置文件
Include conf/extra/httpd-multilang-errordoc.conf
#指定目錄列表配置文件并將其附加到主配置文件
#Include conf/extra/httpd-autoindex.conf
#指定語言配置文件并將其附加到主配置文件
Include conf/extra/httpd-languages.conf
#指定用戶主目錄配置文件并將其附加到主配置文件
#Include conf/extra/httpd-userdir.conf
#指定用于服務(wù)器信息和狀態(tài)顯示的配置文件并將其附加到主配置文件
#Include conf/extra/httpd-info.conf
#指定提供Apache文檔訪問的配置文件并將其附加到配置文件
#Include conf/extra/httpd-manual.conf
#指定DAV配置文件并將其附加到主配置文件
#Include conf/extra/httpd-dav.conf
#指定與Apache服務(wù)自身相關(guān)的配置文件并將其附加到主配置文件
Include conf/extra/httpd-default.conf
#指定mod_deflate壓縮模塊配置文件并將其附加到主配置文件
Include conf/extra/httpd-deflate.conf
#指定mod_expires模塊配置文件并將其附加到主配置文件
Include conf/extra/httpd-expires.conf
##指定虛擬主機(jī)配置文件并將其附加到主配置文件
#Include conf/extra/httpd-vhosts.conf
#指定SSL配置文件并將其附加到主配置文件
Include conf/extra/httpd-ssl.conf
##SSL默認(rèn)配置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#配置多路處理模塊(MPM) httpd-mpm.conf
首先說一下原理:
prefork模式
這個多路處理模塊(MPM)實現(xiàn)了一個非線程型的推捐、預(yù)派生的web服務(wù)器,它的工作方式類似于Apache 1.3侧啼。它適合于沒有線程安全庫牛柒,需要避免線程兼容性問題的系統(tǒng)。它是要求將
每個請求相互獨立的情況下最好的MPM痊乾,這樣若一個請求出現(xiàn)問題就不會影響到其他請求皮壁。
這個MPM具有很強(qiáng)的自我調(diào)節(jié)能力,只需要很少的配置指令調(diào)整哪审。最重要的是將MaxClients設(shè)置為一個足夠大的數(shù)值以處理潛在的請求高峰闪彼,同時又不能太大,以致需要使用的內(nèi)存
超出物理內(nèi)存的大小协饲。
worker模式
此多路處理模塊(MPM)使網(wǎng)絡(luò)服務(wù)器支持混合的多線程多進(jìn)程畏腕。由于使用線程來處理請求,所以可以處理海量請求茉稠,而系統(tǒng)資源的開銷小于基于進(jìn)程的MPM描馅。但是,它也使用了多進(jìn)
程而线,每個進(jìn)程又有多個線程铭污,以獲得基于進(jìn)程的MPM的穩(wěn)定性。
控制這個MPM的最重要的指令是膀篮,控制每個子進(jìn)程允許建立的線程數(shù)的ThreadsPerChild指令嘹狞,和控制允許建立的總線程數(shù)的MaxClients指令
#設(shè)置prefork多路處理模塊
<IfModule mpm_prefork_module>
**? ? StartServers? ? ? ? ? 5**
**? ? MinSpareServers? ? ? 5**
**? ? MaxSpareServers? ? ? 10**
**? ? ServerLimit 8000**
**? ? MaxClients? ? ? ? 8000**
**? ? MaxRequestsPerChild? 0**
</IfModule>
StartServers:設(shè)置服務(wù)器啟動時建立的子進(jìn)程數(shù)量。因為子進(jìn)程數(shù)量動態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個參數(shù)誓竿。
MinSpareServers:設(shè)置空閑子進(jìn)程的最小數(shù)量磅网。所謂空閑子進(jìn)程是指沒有正在處理請求的子進(jìn)程。如果當(dāng)前空閑子進(jìn)程數(shù)少于 MinSpareServers ,那么Apache將以最大每秒一個的
速度產(chǎn)生新的子進(jìn)程筷屡。只有在非常繁忙機(jī)器上才需要調(diào)整這個參數(shù)涧偷。將此參數(shù)設(shè)的太大通常是一個壞主意。
MaxSpareServers:設(shè)置空閑子進(jìn)程的最大數(shù)量毙死。如果當(dāng)前有超過MaxSpareServers數(shù)量的空閑子進(jìn)程,那么父進(jìn)程將殺死多余的子進(jìn)程燎潮。只有在非常繁忙機(jī)器上才需要調(diào)整這個參數(shù)
。將此參數(shù)設(shè)的太大通常是一個壞主意扼倘。如果你將該指令的值設(shè)置為比MinSpareServers 小,Apache將會自動將其修改成"MinSpareServers+1"确封。
ServerLimit:服務(wù)器允許配置的進(jìn)程數(shù)上限。只有在你需要將MaxClients設(shè)置成高于默認(rèn)值256的時候才需要使用。要將此指令的值保持和MaxClients一樣爪喘。修改此指令的值必須
完全停止服務(wù)后再啟動才能生效颜曾,以restart方式重啟動將不會生效。
MaxClients:用于伺服客戶端請求的最大請求數(shù)量(最大子進(jìn)程數(shù))腥放,任何超過MaxClients限制的請求都將進(jìn)入等候隊列泛啸。默認(rèn)值是256绿语,如果要提高這個值必須同時提高
ServerLimit的值秃症。筆者建議將初始值設(shè)為(以Mb為單位的最大物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動態(tài)調(diào)整。比如一臺4G內(nèi)存的機(jī)器吕粹,那么初始值就是4000/2=2000种柑。
MaxRequestsPerChild:設(shè)置每個子進(jìn)程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達(dá)MaxRequestsPerChild的限制后匹耕,子進(jìn)程將會結(jié)束聚请。如果MaxRequestsPerChild為"0",子進(jìn)程
將永遠(yuǎn)不會結(jié)束稳其。將MaxRequestsPerChild設(shè)置成非零值有兩個好處:可以防止(偶然的)內(nèi)存泄漏無限進(jìn)行而耗盡內(nèi)存驶赏;
給進(jìn)程一個有限壽命,從而有助于當(dāng)服務(wù)器負(fù)載減輕的時候減少活動進(jìn)程的數(shù)量既鞠。
如果設(shè)置為非零值煤傍,建議設(shè)為10000-30000之間的一個值。
公式:MaxClients<=ServerLimit
#設(shè)置worker多路處理模塊
<IfModule mpm_worker_module>
**? ? StartServers? ? ? ? ? 5**
**? ? ServerLimit? ? ? ? ? 20**
**? ? ThreadLimit? ? ? ? 200**
**? ? MaxClients? ? ? ? 4000**
**? ? MinSpareThreads? ? ? 25**
**? ? MaxSpareThreads? 250**
**? ? ThreadsPerChild? ? 200**
**? ? MaxRequestsPerChild? 0**
</IfModule>
StartServers:設(shè)置服務(wù)器啟動時建立的子進(jìn)程數(shù)量嘱蛋。因為子進(jìn)程數(shù)量動態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個參數(shù)蚯姆。
ServerLimit:服務(wù)器允許配置的進(jìn)程數(shù)上限。只有在你需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認(rèn)值16個子進(jìn)程的時候才需要使用這個指令洒敏。不要將該指令的值設(shè)
置的比MaxClients 和ThreadsPerChild需要的子進(jìn)程數(shù)量高龄恋。修改此指令的值必須完全停止服務(wù)后再啟動才能生效,以restart方式重啟動將不會生效凶伙。
ThreadLimit:設(shè)置每個子進(jìn)程可配置的線程數(shù)ThreadsPerChild上限,該指令的值應(yīng)當(dāng)和ThreadsPerChild可能達(dá)到的最大值保持一致郭毕。修改此指令的值必須完全停止服務(wù)后再啟動
才能生效,以restart方式重啟動將不會生效函荣。
MaxClients:用于伺服客戶端請求的最大接入請求數(shù)量(最大線程數(shù))铣卡。任何超過MaxClients限制的請求都將進(jìn)入等候隊列。默認(rèn)值是"400"偏竟,16 (ServerLimit)乘以25
(ThreadsPerChild)的結(jié)果煮落。因此要增加MaxClients的時候,你必須同時增加 ServerLimit的值踊谋。筆者建議將初始值設(shè)為(以Mb為單位的最大物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動
態(tài)調(diào)整蝉仇。比如一臺4G內(nèi)存的機(jī)器,那么初始值就是4000/2=2000。
MinSpareThreads:最小空閑線程數(shù),默認(rèn)值是"75"轿衔。這個MPM將基于整個服務(wù)器監(jiān)視空閑線程數(shù)沉迹。如果服務(wù)器中總的空閑線程數(shù)太少,子進(jìn)程將產(chǎn)生新的空閑線程害驹。
MaxSpareThreads:設(shè)置最大空閑線程數(shù)鞭呕。默認(rèn)值是"250"。這個MPM將基于整個服務(wù)器監(jiān)視空閑線程數(shù)宛官。如果服務(wù)器中總的空閑線程數(shù)太多葫松,子進(jìn)程將殺死多余的空閑線程。
MaxSpareThreads的取值范圍是有限制的底洗。Apache將按照如下限制自動修正你設(shè)置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和腋么。
ThreadsPerChild:每個子進(jìn)程建立的線程數(shù)。默認(rèn)值是25亥揖。子進(jìn)程在啟動時建立這些線程后就不再建立新的線程了珊擂。每個子進(jìn)程所擁有的所有線程的總數(shù)要足夠大,以便可以處理
可能的請求高峰费变。
MaxRequestsPerChild:設(shè)置每個子進(jìn)程在其生存期內(nèi)允許伺服的最大請求數(shù)量摧扇。到達(dá)MaxRequestsPerChild的限制后,子進(jìn)程將會結(jié)束挚歧。如果MaxRequestsPerChild為"0"扛稽,子進(jìn)程
將永遠(yuǎn)不會結(jié)束。將MaxRequestsPerChild設(shè)置成非零值有兩個好處:可以防止(偶然的)內(nèi)存泄漏無限進(jìn)行而耗盡內(nèi)存昼激;
給進(jìn)程一個有限壽命庇绽,從而有助于當(dāng)服務(wù)器負(fù)載減輕的時候減少活動進(jìn)程的數(shù)量。
如果設(shè)置為非零值橙困,建議設(shè)為10000-30000之間的一個值瞧掺。
公式:
**? ? ? ? ThreadLimit >= ThreadsPerChild**
**? ? ? ? MaxClients <= ServerLimit * ThreadsPerChild 必須是ThreadsPerChild的倍數(shù)**
**? ? ? ? MaxSpareThreads >= MinSpareThreads+ThreadsPerChild**
#配置Apache服務(wù)器默認(rèn)設(shè)置 httpd-default.conf
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
Timeout:設(shè)置服務(wù)器在斷定請求失敗前等待的秒數(shù)。默認(rèn)值300凡傅。
KeepAlive:設(shè)置是否啟用HTTP持久鏈接辟狈,On 代表打開,Off 代表關(guān)閉夏跷。如果用于同一頁面包含大量靜態(tài)文件的應(yīng)用哼转,設(shè)置為On,以提高性能槽华;如果用于主要為動態(tài)頁面的應(yīng)用壹蔓,
設(shè)置為Off,以節(jié)約內(nèi)存資源猫态;如果服務(wù)器前跑有squid或者其它七層設(shè)備佣蓉,設(shè)置為On披摄。
MaxKeepAliveRequests:限制當(dāng)啟用KeepAlive時,每個連接允許的請求數(shù)量勇凭。如果將此值設(shè)為"0"疚膊,將不限制請求的數(shù)目。筆者建議將此值設(shè)為100-500之間的一個值虾标,以確保最優(yōu)
的服務(wù)器性能寓盗。
KeepAliveTimeout:設(shè)置持久鏈接中服務(wù)器在兩次請求之間等待的秒數(shù)。對于高負(fù)荷服務(wù)器來說璧函,KeepAliveTimeout值較大會導(dǎo)致一些性能方面的問題:超時值越大傀蚌,與空閑客戶
端保持連接的進(jìn)程就越多。
UseCanonicalName:配置服務(wù)器如何確定它自己的域名柳譬,可選值為On | Off | DNS喳张。DNS用于為大量基于IP的虛擬主機(jī)支持那些古董級的不提供"Host:"頭的瀏覽器使用续镇。筆者建議
設(shè)置為Off美澳。
AccessFileName:設(shè)置分布式配置文件的名字,默認(rèn)為.htaccess摸航。如果為某個目錄啟用了分布式配置文件功能制跟,那么在向客戶端返回其中的文檔時,服務(wù)器將在這個文檔所在的各
級目錄中查找此配置文件酱虎,因此會帶來性能問題雨膨,筆者建議關(guān)閉分布式配置文件功能。
ServerTokens:控制服務(wù)器回應(yīng)給客戶端的"Server:"應(yīng)答頭是否包含關(guān)于服務(wù)器操作系統(tǒng)類型和編譯進(jìn)的模塊描述信息读串,同時還控制著 ServerSignature指令的顯示內(nèi)容聊记。可選值
為Full | OS | Minor | Minimal | Major | Prod恢暖。筆者建議設(shè)置為顯示最少信息的Prod排监。
ServerSignature:配置服務(wù)器生成頁面的頁腳,可選值為On | Off | EMail杰捂。采用On會簡單的增加一行關(guān)于服務(wù)器版本和正在伺服的虛擬主機(jī)的ServerName舆床,而EMail設(shè)置會額外
創(chuàng)建一個指向 ServerAdmin的"mailto:"部分。建議使用默認(rèn)值Off嫁佳。
HostnameLookups:設(shè)置是否啟用對客戶端IP的DNS查找挨队,可選值為On | Off | Double。DNS查詢會造成明顯的時間消耗蒿往,建議設(shè)置為Off盛垦。
#配置mod_deflate壓縮模塊 httpd-deflate.conf
mod_deflate模塊提供了DEFLATE輸出過濾器,允許服務(wù)器在將輸出內(nèi)容發(fā)送到客戶端以前進(jìn)行壓縮瓤漏,以節(jié)約帶寬腾夯。
編輯mod_deflate壓縮模塊設(shè)置文件:
<IfModule mod_deflate.c>
**? ? DeflateMemLevel 9**
**? ? DeflateWindowSize 15**
**? ? DeflateBufferSize 8096**
**? ? DeflateCompressionLevel 8**
**? ? ## 調(diào)試時去掉下面5行前的注釋符省撑,用以記錄壓縮日志**
**? ? #DeflateFilterNote Input instream**
**? ? #DeflateFilterNote Output outstream**
**? ? #DeflateFilterNote Ratio ratio**
**? ? #LogFormat '"%r" %b %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate**
**? ? #CustomLog logs/deflate_log deflate**
**? ? ## 插入DEFLATE過濾器,以啟用輸出壓縮**
SetOutputFilter DEFLATE
## Netscape 4.x 有一些問題俯在,僅壓縮txt/html類型
**? ? BrowserMatch ^Mozilla/4 gzip-only-text/html**
## Netscape 4.06-4.08不能處理任何壓縮內(nèi)容竟秫,不進(jìn)行壓縮
**? ? BrowserMatch ^Mozilla/4.0[678] no-gzip**
**? ? ## MSIE 會偽裝成 Netscape ,但是事實上它沒有問題**
**? ? BrowserMatch \bMSIE !no-gzip !gzip-only-text/html**
**? ? ## 設(shè)置圖片跷乐、mp3肥败、壓縮格式文件等不需要進(jìn)行壓縮內(nèi)容**
**? ? SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary**
**? ? SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary**
**? ? SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary**
**? ? ## 確保代理不會發(fā)送錯誤的內(nèi)容**
**? ? Header append Vary User-Agent env=!dont-vary**
</IfModule>
DeflateMemLevel:指定zlib在壓縮時最多可以使用多少內(nèi)存,取值范圍在1到9之間愕提。
DeflateWindowSize:定義zlib壓縮窗口(compression window)的大小馒稍,取值范圍在1到15之間,通常窗口越大壓縮效果越好浅侨。
DeflateBufferSize:定義zlib一次壓縮的片斷的字節(jié)數(shù)纽谒,默認(rèn)為8096。
DeflateCompressionLevel:設(shè)定壓縮程度如输,越高的壓縮程度就會有越好的壓縮效果鼓黔,同時也意味著占用越多的CPU資源。取值范圍在 1(最低壓縮率) 到 9(最高壓縮率)之間不见,如果
不設(shè)置此指令澳化,默認(rèn)為zlib的默認(rèn)值。
DeflateFilterNote:在日志中放置壓縮率標(biāo)記稳吮。
語法為:DeflateFilterNote type notename
notename就表示這個壓縮率標(biāo)記的名字缎谷,你可以為了某種統(tǒng)計目的將這個標(biāo)記的名字添加到訪問日志中。
type指定notename標(biāo)記所記錄的數(shù)據(jù)類型:Input灶似,在標(biāo)記中存儲過濾器輸入流的字節(jié)數(shù)列林;Output,在標(biāo)記中存儲過濾器輸出流的字節(jié)數(shù)酪惭;Ratio希痴,在標(biāo)記中存儲過濾器的壓縮比(輸
出/輸入100),這是type的默認(rèn)值撞蚕。*
SetOutputFilter:設(shè)置用于在服務(wù)器應(yīng)答發(fā)送到客戶端之前使用的過濾器润梯。如果多于一個過濾器,必須按照處理內(nèi)容的順序用分號(;)分隔甥厦。
BrowserMatch:基于User-Agent頭有條件地設(shè)置環(huán)境變量纺铭。
SetEnvIfNoCase:根據(jù)大小寫無關(guān)的客戶端請求屬性設(shè)置環(huán)境變量。
Headers:配置HTTP應(yīng)答頭刀疙。這個指令可以替換舶赔、合并、刪除HTTP應(yīng)答頭谦秧。應(yīng)答頭緊跟在內(nèi)容處理器和輸出過濾器完工之后生成竟纳,這時候才能對頭進(jìn)行修改撵溃。
#配置mod_expires模塊
這個模塊控制服務(wù)器應(yīng)答時的Expires頭內(nèi)容和Cache-Control頭的max-age指令。有效期(expiration date)可以設(shè)置為相對于源文件的最后修改時刻或者客戶端的訪問時刻锥累。這些
HTTP頭向客戶端表明了文檔的有效性和持久性缘挑。如果有緩存,文檔就可以從緩存(除已經(jīng)過期)而不是從服務(wù)器讀取桶略。接著语淘,客戶端考察緩存中的副本,看看是否過期或者失效际歼,以
決定是否必須從服務(wù)器獲得更新惶翻。
編輯mod_expires設(shè)置文件:httpd-expires.conf
## mod_expires設(shè)置文件
<IfModule mod_expires.c>
**? ? ? ? ExpiresActive on**
? ? ExpiresDefault A300
**? ? ? ? ExpiresByType text/html A300**
**? ? ? ? ExpiresByType image/gif A2592000**
**? ? ? ? ExpiresByType image/jpeg A2592000**
**? ? ? ? ExpiresByType image/png A2592000**
**? ? ? ? ExpiresByType text/css A2592000**
**? ? ? ? ExpiresByType text/js A2592000**
**? ? ? ? ExpiresByType text/javascript A2592000**
**? ? ? ? ExpiresByType application/x-javascript A2592000**
</IfModule>
ExpiresActive:對其作用范圍內(nèi)的文檔啟用或禁用產(chǎn)生Expires和Cache-Control頭的功能。若設(shè)置為 Off 則不會為其作用范圍內(nèi)的任何文檔生成Expires和Cache-Control頭(除非
被更低一層的規(guī)則改寫鹅心,比如.htaccess文件)吕粗。若設(shè)置為 On 則會按照ExpiresByType和ExpiresDefault指令定義的標(biāo)準(zhǔn)為其作用范圍內(nèi)的文檔生成Expires和Cache-Control 頭。
注意旭愧,這個指令并不保證Expires或Cache-Control頭一定會產(chǎn)生颅筋。如果定義的標(biāo)準(zhǔn)不規(guī)范,將不會產(chǎn)生這兩個頭榕茧,其效果是好像從未設(shè)置過這個指令一樣垃沦。
ExpiresByType:為指定MIME類型的文檔配置Expires頭的值客给。
語法為:ExpiresByType MIME-type <code>seconds
seconds參數(shù)設(shè)置了添加到基準(zhǔn)時間以構(gòu)造有效期限的秒數(shù)用押。Cache-Control: max-age的計算方法是從有效期減去當(dāng)前請求時間并轉(zhuǎn)化為秒數(shù)。
基準(zhǔn)時刻可以是源文件的最后修改時刻或者客戶端對源文件的訪問時刻靶剑,至于使用那一個則由<code>指定蜻拨。"M"表示源文件的最后修改時刻,"A"表示客戶端對源文件的訪問時刻桩引。
需要注意的是<code>和seconds之間沒有空格缎讼。如果使用"M",所有當(dāng)前緩存中的文檔副本都將在同一時刻過期坑匠,這個可能對定期更新的URL(比如位于同一位置的每周通告)很有好處
血崭。如果使用"A",則每個客戶端所得到的有效期是不一樣的厘灼,這個可能對那些幾乎不更新的圖片文件很有好處夹纫,特別是對于一組都引用了相同圖片的相關(guān)文檔。
ExpiresDefault:設(shè)置其作用范圍內(nèi)的所有文檔的默認(rèn)有效期的計算方法设凹,它可以被ExpiresByType指令基于MIME類型被改寫舰讹。
語法為:ExpiresDefault seconds
<code>seconds同ExpiresByType一致。
#最后配置一下虛擬主機(jī)? httpd-vhost.conf
#這里重點介紹一下基于多端口的配置
**NameVirtualHost *:81
NameVirtualHost:82
NameVirtualHost :83
ServerAdmin[
jafy@jafy00.com*](mailto:jafy@jafy00.com)DocumentRoot /www1
ServerName
www.jafy00.comErrorLog logs/www1-error.log
CustomLog logs/www1-access_log common
**
Options FollowSymLinks
Deny from all
Allow from all
ServerAdmin**jafy@jafy00.comDocumentRoot /www2
ServerName
www.jafy00.comDirectoryIndex index.php index.html
ErrorLog logs/www2-error.log
CustomLog logs/www2-access_log combined
作者:小僧有禮了
鏈接:http://www.reibang.com/p/ada351d0a02b
來源:簡書
著作權(quán)歸作者所有闪朱。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)月匣,非商業(yè)轉(zhuǎn)載請注明出處钻洒。