天天看點

apache配置檔案詳解

ServerTokens os     #顯示作業系統類型,Prod,隻顯示apache,其他都不顯示.

ServerRoot "/etc/httpd"    #httpd的運作環境

PidFile run/httpd.pid    #pid檔案位置

Timeout 60    #不論接收或傳送,當持續連線等待超過 60 秒則該次連線就中斷。

KeepAlive on    

Keep-Alive擴充自HTTP/1.0和HTTP/1.1的持久連結特性。提供了長效的HTTP會話,用以在同一個TCP連接配接中進行多次請求。在某些情況下,這樣的方式會對包含大量圖檔的HTML文檔造成的延時起到50%的加速作用

KeepAliveTimeout 15

Apache在關閉持久連接配接前等待下一個請求的秒數。一旦收到一個請求,逾時值将會被設定為Timeout指令指定的秒數。

對于高負荷伺服器來說,KeepAliveTimeout值較大會導緻一些性能方面的問題:逾時值越大,與空閑用戶端保持連接配接的程序就越多。

MaxKeepAliveRequests 300

MaxKeepAliveRequests指令限制了當啟用KeepAlive時,每個連接配接允許的請求數量。如果将此值設為"0",将不限制請求的數目。我們建議最好将此值設為一個比較大的值,以確定最優的伺服器性能。

<IfModule prefork.c>

StartServers       8

StartServers指令設定了伺服器啟動時建立的子程序數量。因為子程序數量動态的取決于負載的輕重,所有一般沒有必要調整這個參數。

不同的MPM預設值也不一樣。對于worker預設值是"3"。對于prefork預設值是"5",mpmt_os2是"2"

MinSpareServers    5

MinSpareServers指令設定空閑子程序的最小數量。所謂空閑子程序是指沒有正在處理請求的子程序。如果目前空閑子程序數少于MinSpareServers ,那麼Apache将以最大每秒一個的速度産生新的子程序。

隻有在非常繁忙機器上才需要調整這個參數。将此參數設的太大通常是一個壞主意。

MaxSpareServers   20

MaxSpareServers指令設定空閑子程序的最大數量。所謂空閑子程序是指沒有正在處理請求的子程序。如果目前有超過MaxSpareServers數量的空閑子程序,那麼父程序将殺死多餘的子程序。

隻有在非常繁忙機器上才需要調整這個參數。将此參數設的太大通常是一個壞主意。如果你将該指令的值設定為比MinSpareServers小,Apache将會自動将其修改成"MinSpareServers+1"。

ServerLimit      256

對于preforkMPM,這個指令設定了MaxClients最大允許配置的數值。對于workerMPM,這個指令和ThreadLimit結合使用設定了MaxClients最大允許配置的數值。任何在重新開機期間對這個指令的改變都将被忽略,但對MaxClients的修改卻會生效。

使用這個指令時要特别當心。如果将ServerLimit設定成一個高出實際需要許多的值,将會有過多的共享記憶體被配置設定。如果将ServerLimit和MaxClients設定成超過系統的處理能力,Apache可能無法啟動,或者系統将變得不穩定。

對于preforkMPM,隻有在你需要将MaxClients設定成高于預設值256的時候才需要使用這個指令。要将此指令的值保持和MaxClients一樣。

對于workerMPM,隻有在你需要将MaxClients和ThreadsPerChild設定成需要超過預設值16個子程序的時候才需要使用這個指令。不要将該指令的值設定的比MaxClients 和ThreadsPerChild需要的子程序數量高。

MaxClients       256

MaxClients指令設定了允許同時伺服的最大接入請求數量。任何超過MaxClients限制的請求都将進入等候隊列,直到達到ListenBacklog指令限制的最大值為止。一旦一個連結被釋放,隊列中的請求将得到服務。

對于非線程型的MPM(也就是prefork),MaxClients表示可以用于伺服用戶端請求的最大子程序數量,預設值是256。要增大這個值,你必須同時增大ServerLimit 。

對于線程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服用戶端請求的最大線程數量。線程型的beos的預設值是50。對于混合型的MPM預設值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。是以要将MaxClients增加到超過16個程序才能提供的時候,你必須同時增加ServerLimit的值。

MaxRequestsPerChild  4000

MaxRequestsPerChild指令設定每個子程序在其生存期内允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子程序将會結束。如果MaxRequestsPerChild為"0",子程序将永遠不會結束。

</IfModule>

prefork模式可以算是很古老但是非常穩定的Apache模式。Apache在啟動之初,就預先fork一些子程序,然後等待請求進來。之是以這樣做,是為了減少頻繁建立和銷毀程序的開銷。每個子程序隻有一個線程,在一個時間點内,隻能處理一個請求。

MinSpareThreads     25

設定最小空閑線程數,用于處理可能到來的突發請求。不同的MPM對這個指令的處理是不一樣的:

worker的預設值是"75"。這個MPM将基于整個伺服器監視空閑線程數。如果伺服器中總的空閑線程數太少,子程序将産生新的空閑線程。

mpm_netware的預設值是"10"。既然這個MPM隻運作單獨一個子程序,此MPM當然亦基于整個伺服器監視空閑線程數。

beos和mpmt_os2的工作方式與mpm_netware差不多,beos的預設值是"1";mpmt_os2的預設值是"5"。

MaxSpareThreads     75 

設定最大空閑線程數。不同的MPM對這個指令的處理是不一樣的:

worker的預設值是"250"。這個MPM将基于整個伺服器監視空閑線程數。如果伺服器中總的空閑線程數太多,子程序将殺死多餘的空閑線程。

mpm_netware的預設值是"100"。既然這個MPM隻運作單獨一個子程序,此MPM當然亦基于整個伺服器監視空閑線程數。

beos和mpmt_os2的工作方式與mpm_netware差不多,beos的預設值是"50";mpmt_os2的預設值是"10"。

ThreadsPerChild     25

這個指令設定了每個子程序建立的線程數。子程序在啟動時建立這些線程後就不再建立新的線程了。如果使用一個類似于mpm_winnt隻有一個子程序的MPM,這個數值要足夠大,以便可以處理可能的請求高峰。如果使用一個類似于worker有多個子程序的MPM,每個子程序所擁有的所有線程的總數要足夠大,以便可以處理可能的請求高峰。

對于mpm_winnt,ThreadsPerChild的預設值是64;對于其他MPM是25。

User apache

Group apache

ServerAdmin [email protected]     #管理者郵箱

ServerName www.a.com   

ServerName指令設定了伺服器用于辨識自己的主機名和端口号。這主要用于建立重定向URL。比如,一個放置web伺服器的主機名為simple.example.com ,但同時有一個DNS别名www.example.com 。而您希望web伺服器更顯著一點,您可以使用如下的指令:

ServerName www.example.com:80

當沒有指定ServerName時,伺服器會嘗試對IP位址進行反向查詢來推斷主機名。如果在ServerName中沒有指定端口号,伺服器會使用接受請求的那個端口。為了加強可靠性和可預測性,您應該使用ServerName顯式的指定一個主機名和端口号。

如果使用的是基于域名的虛拟主機,在<VirtualHost>段中的ServerName将是為了比對這個虛拟主機,在"Host:"請求頭中必須出現的主機名。

可選的'scheme://'字首僅在2.2.3以後的版本中可用,用于在代理之後或離線裝置上也能正确的檢測規範化的伺服器URL。

參見UseCanonicalName和UseCanonicalPhysicalPort指令以獲得關于自引用URL(比如使用mod_dir子產品)是需要指定一個特定端口,還是使用用戶端請求的端口号的更詳細的資訊。

UseCanonicalName off    #如果主機有多個主機名,若為on那麼appache隻接受ServerName指定的主機名

DocumentRoot "/var/www" #資源根目錄

ScriptAlias /cgi-bin/  /web/cgi-bin/ 

對http://myserver/cgi-bin/foo的請求會引導伺服器執行/web/cgi-bin/foo腳本。ScriptAlias指令的行為與Alias指令相同,但同時它又标明此目錄中含有應該由cgi-script處理器處理的CGI腳本。以URL-path開頭的(%已解碼的)的URL會被映射到由第二個參數指定的具有完整路徑名的本地檔案系統中的腳本,/web/cgi-bin/這裡目錄要具有CGI可執行權限

<Directory /web/cgi-bin>

Options ExecCGI  

None,不啟用任何特性

All

除MultiViews之外的所有特性。這是預設設定。

ExecCGI

允許使用mod_cgi執行CGI腳本。

FollowSymLinks

伺服器允許在此目錄中使用符号連接配接,真實的檔案也要在目前目錄中,不然不行

Includes

允許使用mod_include提供的伺服器端包含。

IncludesNOEXEC

允許伺服器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以從ScriptAlias目錄使用"#include virtual"虛拟CGI腳本。

Indexes

如果一個映射到目錄的URL被請求,而此目錄中又沒有DirectoryIndex(例如:index.html),那麼伺服器會傳回由mod_autoindex生成的一個格式化後的目錄清單.

MultiViews

允許使用mod_negotiation提供内容協商的"多重視圖"(MultiViews)。

SymLinksIfOwnerMatch

伺服器僅在符号連接配接與其目的目錄或檔案的擁有者具有相同的uid時才使用它。

AllowOverride None 

當伺服器發現一個.htaccess檔案(由AccessFileName指定)時,它需要知道在這個檔案中聲明的哪些指令能覆寫在此之前指定的配置指令。

僅允許存在于<Directory>配置段

AllowOverride僅在不包含正規表達式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是無效的。

如果此指令被設定為None ,那麼.htaccess檔案将被完全忽略。事實上,伺服器根本不會讀取.htaccess檔案。

當此指令設定為 All時,所有具有".htaccess"作用域的指令都允許出現在.htaccess檔案中。

Order allow,deny 

Deny,Allow

Deny指令在Allow指令之前被評估。預設允許所有通路。任何不比對Deny指令或者比對Allow指令的客戶都被允許通路。

Allow,Deny

Allow指令在Deny指令之前被評估。預設拒絕所有通路。任何不比對Allow指令或者比對Deny指令的客戶都将被禁止通路。

Mutual-failure

隻有出現在Allow清單并且不出現在Deny清單中的主機才被允許通路。這種順序與"Order Allow,Deny"具有同樣效果,不贊成使用。

關鍵字隻能用逗号分隔;它們之間不能有空格。注意在所有情況下每個Allow和Deny指令語句都将被評估。

Allow from all 

Allow指令控制哪些主機可以通路伺服器的該區域。可以根據主機名、IP位址、 IP位址範圍或其他環境變量中捕獲的用戶端請求特性進行控制。

這個指令的第一個參數總是"from",随後的參數可以有三種不同形式:如果指定"Allow from all",則允許所有主機通路,按照下述Deny和Order指令的配置。若要隻允許特定的主機或主機群通路伺服器,host可以用下面任何一種格式來指定:

一個(部分)域名:

Allow from apache.org

主機名與給定字元串比對或者以給定字元串結尾的主機允許通路。隻有完整的名字組成部分才被比對,是以上述例子将比對foo.apache.org但不能比對fooapache.org 。這樣的配置将導緻Apache不管HostnameLookups指令是如何設定的,對一個對客戶IP位址都要執行兩次DNS查詢:一次正查詢保證IP沒有僞造,一次反查詢保證主機名沒有僞造。隻有兩次查詢的結果都吻合,并且主機名能夠被比對,通路才被允許。

完整的IP位址:

Allow from 10.1.2.3

Allow from 192.168.1.104 192.168.1.205

部分IP位址:

Allow from 10.1

Allow from 10 172.20 192.168.2

網絡/nnn無類别域間路由規則

Allow from 10.1.0.0/16

AuthType Basic 

此指令選擇了一個目錄的使用者認證類型。目前隻實作了Basic(mod_auth_basic)和Digest(mod_auth_digest)。

AuthName "Please input username and password:" # 認證時提示的資訊

AuthUserFile /etc/httpd/conf/htpasswd # 認證時使用者的賬号密碼檔案,檔案名為htpasswd

AuthGroupFile /etc/httpd/conf/htgroup #基于組的認證

Require user tom # 隻有tom使用者才能登入 (這是tom即為htpasswd中的帳号)

Require group myusers # 允許哪個組中的使用者登入 

Require valid-user # 出現在賬号密碼檔案中的使用者都能登入

這個指令指定哪些認證使用者允許通路該資源。這些限制由授權支援子產品實作。文法如下:

Require user userid [userid] ...

隻有指定的使用者可以通路此目錄。

Require group group-name [group-name] ...

隻有隸屬于指定組的使用者可以通路此目錄。

Require valid-user

所有有效使用者都可以通路此目

DirectoryIndex test.html指定這個目錄的首頁和nginx裡的index一樣

</Directory> 

建立/etc/httpd/conf/htpasswd檔案,及使用者

使用htpasswd指令建立使用者,在第一次建立時加-c可建立檔案

# htpasswd -c -m /etc/httpd/conf/htpasswd  tom

# htpasswd -m /etc/httpd/conf/htpasswd  jerry

建立組檔案/etc/httpd/conf/htgroup

在檔案中寫入一行

myusers:  tom  jerry 

本文轉自神ge 51CTO部落格,原文連結:http://blog.51cto.com/12218412/1870117

繼續閱讀