Apache HTTP Server 版本2.2
說明 | 根據協(xié)議類型對監(jiān)聽Socket進行優(yōu)化 |
---|---|
語法 | AcceptFilter protocol accept_filter |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.1.5 以后的版本中可用 |
這個指令使得操作系統(tǒng)根據協(xié)議類型對監(jiān)聽socket進行特別的優(yōu)化。其基本前提是內核在數據接受完畢或一個完整的HTTP請求緩沖完成前不向服務器進程發(fā)送socket 。目前僅支持FreeBSD的接收過濾器(Accept Filter)和Linux的更原始的(more primitive)TCP_DEFER_ACCEPT
。
FreeBSD上的默認值是:
AcceptFilter http httpready
AcceptFilter https dataready
httpready
接收過濾器(Accept Filter)在內核級別緩沖整個HTTP請求。一旦一個請求體被完整接收,內核將把它發(fā)送給服務器。參見accf_http(9)手冊頁以獲得更詳細的信息。因為HTTPS請求已經被加密了,所以只使用了accf_data(9)過濾器。
Linux上的默認值是:
AcceptFilter http data
AcceptFilter https data
Linux的TCP_DEFER_ACCEPT
并不支持對http請求進行緩沖。除none
之外的任何值都將在監(jiān)聽程序上啟用TCP_DEFER_ACCEPT
。參見tcp(7)手冊頁以獲得更多詳情。
使用none
將會為那個協(xié)議禁用接收過濾器(accept filter)。這對于像nntp
這樣需要服務器先發(fā)送數據的協(xié)議很有用處:
AcceptFilter nttp none
說明 | 是否接受附帶多余路徑名信息的請求 |
---|---|
語法 | AcceptPathInfo On|Off|Default |
默認值 | AcceptPathInfo Default |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.0.30 及以后的版本中可用 |
此指令決定是否接受在實際文件名(或實際目錄中一個不存在的文件)后跟隨多余路徑名信息的請求。這個多余的路徑名信息可以當作PATH_INFO
環(huán)境變量傳遞給腳本。
比如說,假設/test/
所指向的目錄下只包括一個文件:here.html
,那么對/test/here.html/more
和/test/nothere.html/more
的請求都會將PATH_INFO
環(huán)境變量設為"/more
"。
AcceptPathInfo
指令的取值范圍:
Off
/test/here.html/more
這樣在真實文件名后跟隨一個路徑名的請求將會返回一個"404 NOT FOUND"錯誤。On
/test/here.html
能夠映射到一個有效的文件,那么對/test/here.html/more
的請求就會被接收。Default
PATH_INFO
。而用于伺服腳本的處理器,比如cgi-script和isapi-isa,默認會接受PATH_INFO
。AcceptPathInfo
指令存在的首要目的就是允許您覆蓋處理器關于是否接受PATH_INFO
的默認設置。這種覆蓋是很必要的。比如說,當您使用了類似INCLUDES這樣的過濾器來根據PATH_INFO
產生內容時。核心處理器通常會拒絕這樣的請求,而您就可以用下述的配置使這樣的腳本成為可能:
<Files "mypaths.shtml">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
</Files>
說明 | 分布式配置文件的名字 |
---|---|
語法 | AccessFileName filename |
默認值 | AccessFileName .htaccess |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
如果為某個目錄啟用了分布式配置文件功能,那么在向客戶端返回其中的文檔時,服務器將在這個文檔所在的各級目錄中查找此配置文件。比如:
AccessFileName .acl
在返回文檔/usr/local/web/index.html
之前,服務器會為此指令讀取 /.acl
、/usr/.acl
、/usr/local/.acl
、/usr/local/web/.acl
除非此功能以被如下配置所禁用:
<Directory />
AllowOverride None
</Directory>
說明 | 當應答內容是text/plain 或text/html 時,在HTTP應答頭中加入的默認字符集 |
---|---|
語法 | AddDefaultCharset On|Off|charset |
默認值 | AddDefaultCharset Off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
當且僅當應答內容是text/plain
或text/html
時,此指令將會在HTTP應答頭中加入的默認字符集。理論上這將覆蓋在文檔體中通過<meta>
標簽指定的字符集,但是實際的行為通常取決于用戶瀏覽器的設置。AddDefaultCharset Off
將會禁用此功能。AddDefaultCharset On
將啟用Apache內部的默認字符集iso-8859-1
。您也可以指定使用在IANA注冊過的字符集名字中的另外一個charset 。比如說:
AddDefaultCharset utf-8
AddDefaultCharset
只應當在如下情況下使用:所有文本資源都使用同一種確定的字符集,且分別標記他們的字符集非常麻煩。一個這樣的例子是向包含動態(tài)內容的資源中添加字符集參數(比如先前遺留的CGI腳本),這樣可能會因為在輸出中包含用戶提供的數據而導致跨站點腳本攻擊。但是請注意:更好的解決辦法是修改或刪除這些腳本,因為設置了默認的字符集以后將會使得瀏覽器的字符集自動探測功能失效。
說明 | 對特定的MIME類型指定輸出過濾器 |
---|---|
語法 | AddOutputFilterByType filter[;filter...] MIME-type [MIME-type] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | Apache 2.0.33 以后可用,但在Apache 2.1 以后反對使用 |
此指令根據應答的MIME類型對請求激活特定的輸出過濾器。由于下面將要討論的問題,我們反對使用這個指令。同樣的功能可以通過使用mod_filter
模塊獲得。
下例使用了由mod_deflate
提供的DEFLATE
過濾器。它將把所有以text/html
或text/plain
為標記的輸出(不論靜態(tài)或動態(tài))在發(fā)送到客戶端之前進行壓縮。
AddOutputFilterByType DEFLATE text/html text/plain
如果您希望使用多個過濾器來處理內容,您可以用分號(;)來分隔它們的名字。并對每個過濾器使用AddOutputFilterByType
指令。
下述配置將使所有標記為text/html
的腳本輸出首先被INCLUDES
過濾器處理后再被DEFLATE
過濾器處理。
<Location /cgi-bin/>
Options Includes
AddOutputFilterByType INCLUDES;DEFLATE text/html
</Location>
在某些情況下,用AddOutputFilterByType
來使用過濾器會遭受部分或完全的失敗。比如,如果MIME類型不能確定,那么將不會有過濾器加于其上,從而使之回到DefaultType
的設置。甚至當DefaultType
與其相同的時候也是這樣。
然而,如果您想確認對某些資源相關的內容類型確實使用了過濾器,您可以使用用諸如AddType
或ForceType
這樣的辦法。在一個(non-nph)CGI腳本中設定內容類型也很安全。
由類型決定的輸出過濾器永遠不會作用于來自代理的請求。
說明 | 確定是否允許URL中使用經過編碼的路徑分割符 |
---|---|
語法 | AllowEncodedSlashes On|Off |
默認值 | AllowEncodedSlashes Off |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.0.46 及以后的版本中可用 |
AllowEncodedSlashes
指令允許使用包含經過編碼的路徑分割符的URL("%2F
"→"/
"或"%5C
"→"\
",取決于不同的系統(tǒng))。默認情況下,這些URL將被一個包含"404"(未找到)錯誤的應答拒絕。
AllowEncodedSlashes
On
通常和PATH_INFO
配合使用。
允許使用經過編碼的斜線(路徑分割符)并不意味著解碼。%2F
或%5C
(僅僅取決于不同的系統(tǒng))將會按原樣出現(xiàn)在解碼后的URL字符串中。
說明 | 確定允許存在于.htaccess 文件中的指令類型 |
---|---|
語法 | AllowOverride All|None|directive-type
[directive-type] ... |
默認值 | AllowOverride All |
作用域 | directory |
狀態(tài) | 核心(C) |
模塊 | core |
當服務器發(fā)現(xiàn)一個.htaccess
文件(由AccessFileName
指定)時,它需要知道在這個文件中聲明的哪些指令能覆蓋在此之前指定的配置指令。
AllowOverride
僅在不包含正則表達式的<Directory>
配置段中才是有效的。在<Location>
, <DirectoryMatch>
, <Files>
配置段中都是無效的。如果此指令被設置為None
,那么.htaccess文件將被完全忽略。事實上,服務器根本不會讀取.htaccess
文件。
當此指令設置為 All
時,所有具有".htaccess"作用域的指令都允許出現(xiàn)在.htaccess
文件中。
directive-type可以是下列各組指令之一:
AuthDBMGroupFile
, AuthDBMUserFile
, AuthGroupFile
, AuthName
, AuthType
, AuthUserFile
, Require
, 等)。DefaultType
, ErrorDocument
, ForceType
, LanguagePriority
, SetHandler
, SetInputFilter
, SetOutputFilter
, mod_mime
中的 Add* 和 Remove* 指令等等)、控制文檔元數據的指令(Header
, RequestHeader
, SetEnvIf
, SetEnvIfNoCase
, BrowserMatch
, CookieExpires
, CookieDomain
, CookieStyle
, CookieTracking
, CookieName
)、mod_rewrite
中的指令(RewriteEngine
, RewriteOptions
, RewriteBase
, RewriteCond
, RewriteRule
)和mod_actions
中的Action
指令。AddDescription
, AddIcon
, AddIconByEncoding
, AddIconByType
, DefaultIcon
, DirectoryIndex
, FancyIndexing
, HeaderName
, IndexIgnore
, IndexOptions
, ReadmeName
, 等)。Allow
, Deny
, Order
)。Options
和XBitHack
)?梢栽诘忍柡竺娓郊右粋逗號分隔的(無空格的)Options
選項列表,用來控制允許Options
指令使用哪些選項。例如以下指令只允許在.htaccess
中使用AuthConfig
和Indexes
組的指令:
AllowOverride AuthConfig Indexes
不在這兩組中的指令將會導致服務器產生一個內部錯誤。
說明 | 用于HTTP認證的授權域 |
---|---|
語法 | AuthName auth-domain |
作用域 | directory, .htaccess |
覆蓋項 | AuthConfig |
狀態(tài) | 核心(C) |
模塊 | core |
此指令為目錄的授權域設置名字。此域將發(fā)送給客戶端以使用戶了解應當發(fā)送哪個用戶名和密碼。AuthName
指令帶有一個參數。如果域的名字中包含空格,則必須用引號引起來。它必須與AuthType
和Require
指令以及諸如AuthUserFile
和AuthGroupFile
這樣的指令一起工作。
例如:
AuthName "Top Secret"
提供給AuthName
的字符串將出現(xiàn)在大多數瀏覽器提供的密碼對話框中。
說明 | 用戶認證類型 |
---|---|
語法 | AuthType Basic|Digest |
作用域 | directory, .htaccess |
覆蓋項 | AuthConfig |
狀態(tài) | 核心(C) |
模塊 | core |
此指令選擇了一個目錄的用戶認證類型。目前只實現(xiàn)了Basic
(mod_auth_basic
)和Digest
(mod_auth_digest
)。
要實現(xiàn)認證,還必須同時與AuthName
和Require
指令一起使用。另外,服務器還必須包含一個認證支持模塊(比如mod_authn_file
)和一個授權支持模塊(比如mod_authz_user
)。
說明 | 定位CGI腳本解釋器 |
---|---|
語法 | CGIMapExtension cgi-path .extension |
作用域 | directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | NetWare only |
此指令用于定位Apache CGI腳本解釋器。比如,"CGIMapExtension sys:\foo.nlm .foo
"將把所有具有.foo
后綴的CGI腳本文件傳遞給FOO解釋器。
說明 | 允許生成Content-MD5 應答頭 |
---|---|
語法 | ContentDigest On|Off |
默認值 | ContentDigest Off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | Options |
狀態(tài) | 核心(C) |
模塊 | core |
此指令遵照RFC1854和RFC2068協(xié)議的定義啟用了Content-MD5
應答頭的生成。
MD5是一種為不定長度的數據計算出一個"消息摘要"(有時也稱為"指紋")的算法。并且保證數據中的任何變化都會反應在消息摘要的變化中。
Content-MD5
頭提供了一種端到端的針對整個消息體的信息完整性檢查方法。代理或者客戶端會檢查此頭以偵測在傳輸過程中,消息體是否產生了意外的改變。一個頭的例子如下:
Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
請注意,因為對每個請求都要進行消息摘要的運算(沒有對其值進行緩存),所以這會對您的服務器造成性能方面的影響。
Content-MD5
僅為由Apache核心
伺服的文檔進行發(fā)送,而對于由模塊處理的文檔則不予理會。比如說SSI文檔、CGI腳本的輸出、字節(jié)范圍的應答都不包括這個頭。
說明 | 在服務器無法由其他方法確定內容類型時,發(fā)送的默認MIME內容類型 |
---|---|
語法 | DefaultType MIME-type |
默認值 | DefaultType text/plain |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
有時會發(fā)生這樣的事:服務器會被要求提供一個文檔,而這個文檔的類型無法由它的MIME類型映射所決定。
服務器必須通知客戶端其文檔的內容類型。所以當一個未知類型出現(xiàn)時,將會使用DefaultType
。例如:
DefaultType image/gif
這樣的配置對于里面有很多gif圖片而有些在文件名中缺少.gif
擴展名的目錄非常合適。
注意,與ForceType
指令的不同之處在于:此指令僅提供了默認的mime類型。所有其它mime類型的定義,包括文件的擴展名,或其它可以標識媒體類型的方法都會覆蓋此默認值。
說明 | 封裝一組指令,使之僅對文件空間中的某個目錄及其子目錄生效 |
---|---|
語法 | <Directory directory-path>
... </Directory> |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
<Directory>
和</Directory>
用于封裝一組指令,使之僅對某個目錄及其子目錄生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一個目錄的完整路徑,或是包含了Unix shell匹配語法的通配符字符串。在通配符字符串中,"?
"匹配任何單個的字符,"*
"匹配任何字符序列。您也可以使用"[]
"來確定字符范圍。以上通配符都不能匹配"/"字符。所以<Directory /*/public_html>
將無法匹配/home/user/public_html
,但<Directory /home/*/public_html>
能夠正確匹配。比如說:
<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory>
使用directory-path參數的時候要注意:它們必須與Apache用于訪問文件的文件系統(tǒng)路徑保持一致。賦予特定<Directory>
的指令將無法對通過不同路徑指向的同一個目錄文件生效,比如說通過另外一個符號連接生成的路徑。
擴展的正則表達式也可以通過附加一個"~
"字符來使用。比如說:
<Directory ~ "^/www/(.+/)*[0-9]{3}">
將匹配/www/
下所有由3個數字組成的目錄。
如果有多個(非正則表達式)<Directory>
配置段符合包含某文檔的目錄(或其父目錄),那么指令將以短目錄優(yōu)先的規(guī)則進行應用。并包含.htaccess文件中的指令。比如說在
<Directory />
AllowOverride None
</Directory>
<Directory /home/>
AllowOverride FileInfo
</Directory>
中,訪問文檔/home/web/dir/doc.html
的步驟如下:
AllowOverride None
(禁用.htaccess
文件)。AllowOverride FileInfo
(針對/home
目錄)。/home/.htaccess
、/home/web/.htaccess
、/home/web/dir/.htaccess
中的FileInfo
組指令。正則表達式將在所有普通配置段之后予以考慮。所有的正則表達式將根據它們出現(xiàn)在配置文件中的順序進行應用。比如說,以下配置:
<Directory ~ abc$>
# ......
</Directory>
正則表達式配置段將在所有普通的<Directory>
和.htaccess
文件應用之后才予以考慮。所以正則表達式將匹配/home/abc/public_html/abc
并予以應用。
請注意:Apache對<Directory />
的默認訪問權限為"Allow from All
"。這意味著Apache將伺服任何通過URL映射的文件。我們建議您將這個配置做如下屏蔽:
<Directory />
Order Deny,Allow
Deny from All
</Directory>
然后在您想要使之被訪問的目錄中覆蓋此配置。參閱安全提示以獲取更多詳情。
一般來說<Directory>
指令只會出現(xiàn)在httpd.conf
文件中,但它們也可能出現(xiàn)在任何其它配置文件中。<Directory>
指令不可被嵌套使用,也不能出現(xiàn)在<Limit>
或<LimitExcept>
配置段中。
說明 | 封裝一些指令并作用于文件系統(tǒng)中匹配正則表達式的所有目錄及其子目錄 |
---|---|
語法 | <DirectoryMatch regex>
... </DirectoryMatch> |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
<DirectoryMatch>
和</DirectoryMatch>
用于封裝一組指令。與<Directory>
類似,此指令將僅作用于指定名字的目錄及其子目錄。然而,它可以接受一個正則表達式作為參數。比如說:
<DirectoryMatch "^/www/(.+/)*[0-9]{3}">
將匹配/www/
下所有由3個數字組成的目錄。
<Directory>
獲取如何在普通的<Directory>
中使用正則表達式的描述。說明 | 組成網絡上可見的主文檔樹的根目錄 |
---|---|
語法 | DocumentRoot directory-path |
默認值 | DocumentRoot /usr/local/apache2/htdocs |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
此指令設置了httpd
伺服的目錄。在沒有使用類似Alias
這樣的指令的情況下,服務器會將請求中的URL附加到DocumentRoot
后面以構成指向文檔的路徑。比如說:
DocumentRoot /usr/web
于是對http://www.my.host.com/index.html
的訪問就會指向/usr/web/index.html
。如果directory-path不是絕對路徑,則被假定為是相對于ServerRoot
的路徑。
指定DocumentRoot
時不應包括最后的"/"。
說明 | 在遞送中使用內存映射(memory-mapping)來讀取文件 |
---|---|
語法 | EnableMMAP On|Off |
默認值 | EnableMMAP On |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
此指令指示httpd
在遞送中如果需要讀取一個文件的內容,它是否可以使用內存映射。當處理一個需要訪問文件中的數據的請求時,比如說當遞送一個使用mod_include
進行服務器端分析的文件時,如果操作系統(tǒng)支持,Apache將默認使用內存映射。
這種內存映射有時會帶來性能的提高,但在某些情況下,您可能會需要禁用內存映射以避免一些操作系統(tǒng)的問題:
httpd
的性能。DocumentRoot
上,若已經將一個文件進行了內存映射,則刪除或截斷這個文件會造成httpd
因為分段故障而崩潰。在可能遇到這些問題的服務器配置過程中,您應當使用下面的命令來禁用內存映射:
EnableMMAP Off
對于掛載了NFS的文件夾,可以單獨指定禁用內存映射:
<Directory "/path-to-nfs-files">
EnableMMAP Off
</Directory>
說明 | 使用操作系統(tǒng)內核的sendfile支持來將文件發(fā)送到客戶端 |
---|---|
語法 | EnableSendfile On|Off |
默認值 | EnableSendfile On |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.0.44 及以后的版本中可用 |
這個指令控制httpd
是否可以使用操作系統(tǒng)內核的sendfile支持來將文件發(fā)送到客戶端。默認情況下,當處理一個請求并不需要訪問文件內部的數據時(比如發(fā)送一個靜態(tài)的文件內容),如果操作系統(tǒng)支持,Apache將使用sendfile將文件內容直接發(fā)送到客戶端而并不讀取文件。
這個sendfile機制避免了分開的讀和寫操作以及緩沖區(qū)分配,但是在一些平臺或者一些文件系統(tǒng)上,最好禁止這個特性來避免一些問題:
DocumentRoot
(比如:NFS或SMB),內核可能無法可靠的通過自己的緩沖區(qū)服務于網絡文件。如果出現(xiàn)以上情況,你應當禁用sendfile :
EnableSendfile Off
針對NFS或SMB,這個指令可以被針對目錄的設置覆蓋:
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>
說明 | 當遇到錯誤的時候服務器將給客戶端什么樣的應答 |
---|---|
語法 | ErrorDocument error-code document |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 在Apache2.0中引用文字的語法發(fā)生了變化 |
當遇到問題或錯誤的時候,Apache能被配置為進行以下四種處理之一:
默認會采取第1種方法,而第2-4種方法可以使用ErrorDocument
指令后面跟隨一個HTTP應答代碼和一個URL或信息來進行配置。Apache有時會額外提供一些信息來描述所發(fā)生的問題/錯誤。
URL可以由一個斜杠(/)開頭來指示一個本地URL(相對于DocumentRoot
),或是提供一個能被客戶端解釋的完整的URL。此外還能提供一個可以被瀏覽器顯示的消息。比如:
ErrorDocument 500 http://foo.example.com/cgi-bin/tester
ErrorDocument 404 /cgi-bin/bad_urls.pl
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 "Sorry can't allow you access today"
另外,特殊的"default
"值可以被用來指定使用Apache內置的、簡單的硬編碼消息。當不需要這個定制特性的時候,可以用"default
"恢復Apache內置的、簡單的硬編碼消息,否則將繼承一個已有的ErrorDocument
。
ErrorDocument 404 /cgi-bin/bad_urls.pl
<Directory /web/docs>
ErrorDocument 404 default
</Directory>
請注意,如果您為ErrorDocument
指定了一個外部的URL(比如說,任何在開頭指示了類似"http
"這樣的訪問方法的字符串),Apache將會向客戶端發(fā)送一個重定向指令來告訴它在哪里找到這個文檔,哪怕這個文檔最后還是在這個服務器上。這里面包含著一些暗示:最重要的就是客戶端無法接收到原始的錯誤狀態(tài)代碼,取而代之的是一個重定向狀態(tài)代碼。這將會使一些用狀態(tài)代碼來判斷一個URL是否有效的web機器人或其它客戶端產生誤解。另外,如果您在"ErrorDocument 401
"中使用了外部URL,客戶端將不會提示用戶輸入密碼,因為它根本沒收到這樣一個401的狀態(tài)代碼。所以,如果您想使用"ErrorDocument 401
"指令,就必須指向一個本地的文檔。
Microsoft Internet Explorer (MSIE)在服務器端產生的錯誤信息"很小"的時候會忽略它們而用自己"友好的"錯誤信息進行取代。這個大小的閾值根據錯誤類型而不同。但一般來說,如果您的錯誤信息的大小在512 byte以上,MSIE就會顯示這些服務器端產生的錯誤文檔而不會屏蔽它們。您可以在微軟知識庫的文章Q294807中獲取更多信息。
雖然大多數錯誤信息可以被改寫,但是在有些情況下,將仍然使用某些內置的錯誤信息而不管ErrorDocument
如何設置。特別是在檢測到一個"畸形"請求的情況下,正常的請求處理過程將會被立即中斷,并且立即返回一個內置的錯誤信息。這是為了防止某些不良請求可能導致的安全問題。
在2.0版以前,信息前面會用一個不配對的雙引號作為前導標志。
說明 | 存放錯誤日志的位置 |
---|---|
語法 | ErrorLog file-path|syslog[:facility] |
默認值 | ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows 和 OS/2) |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
ErrorLog
指令指定了當服務器遇到錯誤時記錄錯誤日志的文件。如果file-path不是一個以斜杠(/)開頭的絕對路徑,那么將被認為是一個相對于ServerRoot
的相對路徑。
ErrorLog /var/log/httpd/error_log
如果file-path以一個管道符號(|)開頭,那么會為它指定一個命令來處理錯誤日志。
ErrorLog "|/usr/local/bin/httpd_errors"
如果系統(tǒng)支持,使用"syslog
"替代文件名將通過syslogd(8)來記載日志。默認將使用系統(tǒng)日志機制local7
,但您可以用"syslog:facility
"語法來覆蓋這個設置,其中,facility的取值為syslog(1)中記載的任何一個名字。
ErrorLog syslog:user
安全提示:參閱安全提示文檔獲得關于為什么當記錄日志文件的目錄對于啟動服務器以外的用戶可寫時會對您的服務器構成安全威脅。
當在非Unix平臺上輸入文件路徑的時候,路徑分隔符必須統(tǒng)一使用正斜線(/),即使那個平臺本身使用反斜線(\)。
說明 | 用以創(chuàng)建ETag應答頭的文件的屬性 |
---|---|
語法 | FileETag component ... |
默認值 | FileETag INode MTime Size |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
FileETag
指令配置了當文檔是基于一個文件時用以創(chuàng)建ETag
(實體標簽)應答頭的文件的屬性(ETag
的值用于進行緩沖管理以節(jié)約網絡帶寬)。在Apache1.3.22及以前,ETag
的值總是由文件的inode(索引節(jié)點)、大小、最后修改時間決定。FileETag
指令可以讓您選擇(如果您想進行選擇)這其中哪些要素將被使用。主要關鍵字如下:
FileETag INode MTime Size
ETag
頭可以在INode
, MTime
, Size
前加上"+
"或"-
"以改變由上層繼承下來的默認值。任何沒有上述前綴的關鍵字將立刻完全取消繼承下來的設置。
如果一個目錄的配置包含了"FileETag INode MTime Size
"而其一個子目錄包含了"FileETag -INode
"那么這個子目錄的設置(并會被其下任何沒有進行覆蓋的子目錄繼承)將等價于"FileETag MTime Size
"。
說明 | 包含作用于匹配指定文件名的指令 |
---|---|
語法 | <Files filename> ... </Files> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
<Files>
指令提供了基于文件名的訪問控制,類似于<Directory>
和<Location>
指令。它將配對一個</Files>
指令。在此配置段中定義的指令將作用于其基本名稱(不是完整的路徑)與指定的文件名相符的對象。<Files>
段將根據它們在配置文件中出現(xiàn)的順序被處理:在<Directory>
段和.htaccess
文件被處理之后,但在<Location>
段之前。請注意:<Files>
能嵌入到<Directory>
段中以限制它們作用的文件系統(tǒng)范圍。
filename參數應當是一個文件名或是一個包含通配符的字符串,其中"?
"匹配任何單個字符,"*
"匹配任何字符串序列。在"~
"字符之后同樣可以使用正則表達式。比如:
<Files ~ "\.(gif|jpe?g|png)$">
將匹配絕大部分常見的因特網圖象格式。然而在Apache1.3及其后繼版本中,更推薦使用<FilesMatch>
指令。
請注意與<Directory>
和<Location>
配置段不同的是:<Files>
配置段可用于.htaccess
文件當中。這將允許用戶在文件層面上控制對它們自己文件的訪問。
說明 | 包含作用于與正則表達式匹配的文件名的指令 |
---|---|
語法 | <FilesMatch regex> ... </FilesMatch> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
<FilesMatch>
指令就像<Files>
指令一樣提供了針對文件名的訪問控制。然而,它使用的是正則表達式。比如說:
<FilesMatch "\.(gif|jpe?g|png)$">
將匹配最常見的internet圖形文件格式。
說明 | 強制所有匹配的文件被作為指定的MIME類型進行伺服 |
---|---|
語法 | ForceType MIME-type|None |
作用域 | directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | Apache 2.0之后從其它模塊移動到核心中 |
當此指令放入.htaccess
文件或<Directory>
或<Location>
或<Files>
配置段時,此指令強制所有匹配的文件被當作在MIME-type中指定的Content-Type來伺服。比如說,如果您有一個包含大量GIF文件的目錄,可您又不想全都為它們加上".gif
"擴展名的話,您可以這樣做:
ForceType image/gif
請注意:與DefaultType
指令不同,此指令將覆蓋所有的mime類型關聯(lián),包括標識文件類型的擴展名。
你可以通過使用"None
"覆蓋任何ForceType
設置:
# 強制所有文件為 image/gif:
<Location /images>
ForceType image/gif
</Location>
# 但是正常的mime類型關聯(lián)在這里:
<Location /images/mixed>
ForceType None
</Location>
說明 | 啟用對客戶端IP的DNS查找 |
---|---|
語法 | HostnameLookups On|Off|Double |
默認值 | HostnameLookups Off |
作用域 | server config, virtual host, directory |
狀態(tài) | 核心(C) |
模塊 | core |
此指令啟用了DNS查詢,使得主機名能被記入日志(并用REMOTE_HOST
變量傳遞給CGI/SSI)。參數Double
指定進行一次雙向DNS查詢。也就是說在一次反向查詢之后,再對返回的結果進行一次正向查詢。在正向查詢結果中至少應該有一個ip地址與初始的地址相符。(在"tcpwrappers"中的術語是PARANOID
)
不論此處如何設置,當您使用mod_authz_host
來根據主機名控制訪問的時候,就會執(zhí)行一次雙向查詢。這對安全來說非常必要。請注意如果您沒有設置"HostnameLookups Double
",這種雙向查詢的結果不是自動生成的。比如說:如果僅僅設置了"HostnameLookups On
"而且請求是針對一個根據主機名做了限制的對象,不論雙向查詢是否失敗,CGI還是會把單向查詢的結果用REMOTE_HOST
來傳送。
默認值設置為 Off
是為了那些不需要進行反向查詢的站點節(jié)約網絡帶寬考慮的。這對最終用戶也是有益的,因為這樣他們就不用忍受查詢造成的延遲了。高訪問量的網站應該將此指令設置為 Off
因為DNS查詢會造成明顯的時間消耗。在bin
目錄下的logresolve
工具可以在離線的情況下對已經記入日志的IP地址進行主機名的查詢。
說明 | 封裝一組只有在啟動時當測試結果為真時才生效的指令 |
---|---|
語法 | <IfDefine [!]parameter-name> ...
</IfDefine> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
<IfDefine test>...</IfDefine>
配置段用于包含有條件的指令。<IfDefine>
配置段中的指令僅當test結果為真時才進行處理。如果test為假。此配置段中的指令將會被忽略。
<IfDefine>
配置段中的test可以為以下兩種形式之一:
!
parameter-name在第一種情況下,僅當parameter-name已經定義的情況下才對開始和結束標記之間的指令進行處理。第二種情況則截然相反。僅當parameter-name沒有定義的情況下才進行指令的處理。
parameter-name是在服務啟動時,通過httpd
命令行的 -Dparameter
這樣的形式指定的。
<IfDefine>
配置段是可以嵌套的,從而可以實現(xiàn)簡單的多參數測試。比如說:
httpd -DReverseProxy ...
# httpd.conf
<IfDefine ReverseProxy>
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so
</IfDefine>
說明 | 封裝指令并根據指定的模塊是否啟用為條件而決定是否進行處理 |
---|---|
語法 | <IfModule [!]module-file|module-identifier> ... </IfModule> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | module-identifier僅在 Apache 2.1 及以后的版本中可用 |
<IfModule test>...</IfModule>
配置段用于封裝根據指定的模塊是否啟用而決定是否生效的指令。在<IfModule>
配置段中的指令僅當test為真的時候才進行處理。如果test為假,所有其間的指令都將被忽略。
<IfModule>
段中的test可以為以下兩種方式之一:
在第一種情況下,起始和結束標記之間的指令僅當module被載入后才被執(zhí)行。此模塊可以為編譯時靜態(tài)鏈接進核心的模塊或是使用LoadModule
指令動態(tài)載入的模塊。第二種情況則相反,僅當module沒有載入時才進行指令的處理。
module可以是模塊的標識符或者是編譯模塊時的文件名。比如,rewrite_module
就是一個模塊標識符,而mod_rewrite.c
則是編譯模塊時的文件名。如果模塊包含多個源代碼文件,您應當使用包含STANDARD20_MODULE_STUFF
字符串的那個。
<IfModule>
配置段是可以嵌套的,從而可以實現(xiàn)簡單的多模塊測試。
<IfModule>
配置段中。說明 | 在服務器配置文件中包含其它配置文件 |
---|---|
語法 | Include file-path|directory-path |
作用域 | server config, virtual host, directory |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 通配符僅在 Apache 2.0.41 及以后的版本中可用 |
這個指令允許在服務器配置文件中加入其它配置文件。
Shell風格(fnmatch()
)的通配符可以用于按照字母順序一次包含多個文件。另外,如果Include
指向了一個目錄而不是一個文件,Apache將讀入該目錄及其子目錄下的所有文件,并依照字母順序將這些文件作為配置文件進行解析。但是并不推薦這么做,因為偶爾會有臨時文件在這個目錄中生成,從而導致httpd
啟動失敗。
文件的路徑可以是一個完整的絕對路徑(以一個斜杠開頭):
Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf
或是相對于ServerRoot
目錄的相對路徑:
Include conf/ssl.conf
Include conf/vhosts/*.conf
請確保包含的目錄中不包含任何諸如編輯器臨時文件等引起誤導的文件,因為Apache會嘗試讀取它們并把其中的內容作為配置指令來處理,這樣可能會導致啟動過程的失敗。運行 apachectl configtest
將會把配置檢查時所使用的所有文件列出來以供參考。這將有助于檢驗配置中是否僅包含了您所希望出現(xiàn)那些文件。
root@host# apachectl configtest
Processing config file: /usr/local/apache2/conf/ssl.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
Syntax OK
說明 | 啟用HTTP持久鏈接 |
---|---|
語法 | KeepAlive On|Off |
默認值 | KeepAlive On |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
Keep-Alive擴展自HTTP/1.0和HTTP/1.1的持久鏈接特性。提供了長效的HTTP會話,用以在同一個TCP連接中進行多次請求。在某些情況下,這樣的方式會對包含大量圖片的HTML文檔造成的延時起到50%的加速作用。在Apache1.2版本以后,您可以設置 KeepAlive On
以啟用持久鏈接。
對于HTTP/1.0的客戶端來說,僅當客戶端指定使用的時候才會使用持久鏈接連接。此外,僅當能夠預先知道傳輸的內容長度時,才會與HTTP/1.0的客戶端建立持久鏈接連接。這意味著那些長度不定的內容,諸如CGI輸出、SSI頁面、以及服務器端生成的目錄列表等內容一般來說將無法使用與HTTP/1.0客戶端建立的持久鏈接連接。而對于HTTP/1.1的客戶端來說,如果沒有進行特殊指定,持久將是默認的連接方式。如果客戶端進行了請求,將使用分塊編碼以解決在持久鏈接里發(fā)送未知長度內容的問題。
說明 | 持久鏈接中服務器在兩次請求之間等待的秒數 |
---|---|
語法 | KeepAliveTimeout seconds |
默認值 | KeepAliveTimeout 5 |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
Apache在關閉持久連接前等待下一個請求的秒數。一旦收到一個請求,超時值將會被設置為Timeout
指令指定的秒數。
對于高負荷服務器來說,KeepAliveTimeout
值較大會導致一些性能方面的問題:超時值越大,與空閑客戶端保持連接的進程就越多。
說明 | 僅對指定的HTTP方法進行訪問控制 |
---|---|
語法 | <Limit method [method] ... > ... </Limit> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
訪問控制一般來說是對所有的訪問方法都生效的,這也是我們普遍希望達到的效果。一般情況下,訪問控制指令不應該放入<Limit>
段中。
<Limit>
指令的目的是限制訪問控制的效果使其僅作用于某些HTTP方法。對于其它方法,<Limit>
括號中的訪問限制將不起任何作用。下例中的訪問控制僅作用于POST
, PUT
, DELETE
方法,其它方法不受任何影響:
<Limit POST PUT DELETE>
Require valid-user
</Limit>
列出的方法名可為下列的一個或多個:GET
, POST
, PUT
, DELETE
, CONNECT
, OPTIONS
, PATCH
, PROPFIND
, PROPPATCH
, MKCOL
, COPY
, MOVE
, LOCK
, UNLOCK
。方法名是大小寫敏感的。如果對GET
進行了定義,它會同時作用于HEAD
請求。TRACE
方法不能被限制。
說明 | 對除了指定方法以外的所有HTTP方法進行訪問控制 |
---|---|
語法 | <LimitExcept method [method] ... > ... </LimitExcept> |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
<LimitExcept>
和</LimitExcept>
用于封裝一組訪問控制指令,并將其作用于所有沒有在參數中標出的HTTP方法。也就是說,與<Limit>
相反,它用于控制標準的和非標準以及無法辨識的方法。
比如:
<LimitExcept POST GET>
Require valid-user
</LimitExcept>
說明 | 指定內部重定向和嵌套子請求的最大數量 |
---|---|
語法 | LimitInternalRecursion number [number] |
默認值 | LimitInternalRecursion 10 |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.0.47 及以后的版本中可用 |
例如,當使用Action
指令內部重定向原始請求到一個CGI腳本時,一個內部重定向將會發(fā)生。子請求是Apache的一個用于找到如果一個URI被請求時將會發(fā)生什么的機制。例如,mod_dir
使用子請求來尋找那些根據DirectoryIndex
指令應當被列出的文件。
LimitInternalRecursion
可以防止服務器進入一個內部重定向或者子請求的死循環(huán)而崩潰。這樣的死循環(huán)通常由錯誤的配置引起。
這個指令存儲了兩個不同的限制,這兩個限制是基于每個單獨的請求進行計算的。第一個number限制了內部重定向鏈的最大長度(一個接一個)。第二個number限制了子請求的最大嵌套層數。如果你只指定了一個number ,那么將會被同時應用于這兩個限制。
LimitInternalRecursion 5
說明 | 限制客戶端發(fā)送的HTTP請求體的最大字節(jié)長度 |
---|---|
語法 | LimitRequestBody bytes |
默認值 | LimitRequestBody 0 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
bytes在0(意味著無限制)到2147483647(2GB)間限制了請求體所允許的字節(jié)數。
LimitRequestBody
可以讓用戶在其作用范圍內(整個服務器、特定目錄、特定文件、特定位置)設置一個允許客戶端發(fā)送的HTTP請求體的最大字節(jié)長度的限制。如果客戶端的請求超出了這個限制,服務器會回應一個錯誤而不是伺服這個請求。一個普通請求的信息體在很大程度上取決于資源的自然屬性和這個資源允許的方法。CGI腳本經常用消息體把表單的信息傳遞給服務器。使用PUT
方法至少會需要與服務器期望從這個資源得到的信息量差不多大小的值。
此指令給了服務器管理員更大的可控性以控制客戶端不正常的請求行為。這有助于避免某些形式的拒絕服務攻擊。
比如,如果您允許文件上傳到某個位置,而且希望能將上傳文件的大小設置為100K,您可以使用下面的指令:
LimitRequestBody 102400
說明 | 限制接受客戶端請求中HTTP請求頭域的數量 |
---|---|
語法 | LimitRequestFields number |
默認值 | LimitRequestFields 100 |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
Number是一個0(意味著不限)到32767之間的整數。默認值為編譯時的常量DEFAULT_LIMIT_REQUEST_FIELDS
(發(fā)布值為100)。
LimitRequestFields
指令允許服務器管理員修改在一個HTTP請求中的請求頭域的數量限制。服務器需要此值大于一個普通客戶端請求中包含頭域的數量。一個客戶端請求頭域的數量很少大于20,但根據客戶端的不同這個數字有很大的差別,經常取決于用戶配置他們的瀏覽器擴展以支持更詳細的內容協(xié)商?蛇x的HTTP擴展經常使用請求頭域來實現(xiàn)。
這個指令給了服務器管理員更大的可控性以控制客戶端不正常的請求行為。這有助于避免某些形式的拒絕服務攻擊。如果正常使用的客戶端得到了服務器的錯誤應答,指出其在請求中發(fā)送了過多的頭域,您應該適當的增大此值。
例如:
LimitRequestFields 50
說明 | 限制客戶端發(fā)送的請求頭的字節(jié)數 |
---|---|
語法 | LimitRequestFieldsize bytes |
默認值 | LimitRequestFieldsize 8190 |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
bytes指定了HTTP請求頭允許的字節(jié)大小。
LimitRequestFieldSize
指令允許服務器管理員增加或減少HTTP請求頭域大小的限制。一般來說,服務器需要此值足夠大,以適應普通客戶端的任何請求的頭域大小。一個普通頭域的大小對于不同的客戶端來說是有很大差別的,一般與用戶配置他們的瀏覽器以支持更多的內容協(xié)議密切相關。SPNEGO的認證頭最大可能達到12392字節(jié)。
這個指令給了服務器管理員更大的可控性以控制客戶端不正常的請求行為。這有助于避免某些形式的拒絕服務攻擊。
舉例如下:
LimitRequestFieldSize 4094
說明 | 限制接受客戶端發(fā)送的HTTP請求行的字節(jié)數 |
---|---|
語法 | LimitRequestLine bytes |
默認值 | LimitRequestLine 8190 |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
bytes將設置HTTP請求行的字節(jié)數限制。
LimitRequestLine
指令允許服務器管理員增加或減少客戶端HTTP請求行允許大小的限制。因為請求行包括HTTP方法、URI、協(xié)議版本,所以LimitRequestLine
指令會限制請求URI的長度。服務器會需要這個值足夠大以裝載它所有的資源名,包括可能在GET
請求中所傳遞的查詢部分的所有信息。
這個指令給了服務器管理員更大的可控性以控制客戶端不正常的請求行為。這有助于避免某些形式的拒絕服務攻擊。
舉例如下:
LimitRequestLine 4094
說明 | 限制基于XML的請求體的大小 |
---|---|
語法 | LimitXMLRequestBody bytes |
默認值 | LimitXMLRequestBody 1000000 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
限制基于XML的請求體大小的最大字節(jié)數,"0
"將禁用這一檢查。
比如:
LimitXMLRequestBody 0
說明 | 將封裝的指令作用于匹配的URL |
---|---|
語法 | <Location
URL-path|URL> ... </Location> |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
<Location>
提供了基于URL的訪問控制。與<Directory>
指令類似,它也會啟用一個以</Location>
結尾的配置段。<Location>
配置段的處理位于<Directory>
, .htaccess
, <Files>
之后,并依照在配置文件中出現(xiàn)的順序進行處理。
<Location>
配置段完全獨立于文件系統(tǒng)之外操作。這有幾個重要的后果。最重要的是<Location>
不能用于針對文件系統(tǒng)的訪問控制。因為可能會有幾個不同的URL指向文件系統(tǒng)中的同一個文件,所以這樣的控制常常會被很容易的繞過。
<Location>
?使用<Location>
來將指令應用于獨立于文件系統(tǒng)之外的內容。文件系統(tǒng)之內的內容請使用<Directory>
和<Files>
指令。不過一個例外是<Location />
,它可以方便的作用于所用URL。
對所有的原始(非代理)請求來說,匹配的URL應該是具有"/path/
"形式的URL路徑。不包括訪問方法、主機名、端口或查詢字符串等。對于代理的請求,匹配的URL必須為"scheme://servername/path
"的形式,而且必須包括前綴。
URL可以用一個通配符字符串來進行通配符的處理。"?
"匹配任何單個的字符,而"*
"匹配所有字符序列。
也可以附加"~
"字符來表示使用正則表達式。例如:
<Location ~ "/(extra|special)/data">
將匹配所有包含字符串"/extra/data
"或"/special/data
"的URL。在Apache1.3及其后續(xù)版本中,加入了一個新的推薦使用的<LocationMatch>
指令,其功能與<Location>
的正則表達式版本相同。
<Location>
的功能在與SetHandler
指令聯(lián)用時能發(fā)揮最大效能。比如啟用狀態(tài)請求,但僅對來自foo.com
的用戶起效,您可以這樣使用:
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
斜線字符根據它在URL中出現(xiàn)的位置不同有著特殊的意義。大家可能都已經習慣在文件系統(tǒng)中,多個連續(xù)的斜線會被作為單一的斜線處理(例如"/home///foo
"與"/home/foo
"相同)。但在URL里面,這樣是行不通的。<LocationMatch>
指令和正則表達式版本的<Location>
要求您明確使用多重斜線。比如:<LocationMatch ^/abc>
將匹配請求"/abc
"但不會匹配請求"//abc
"。而非正則表達式版本的<Location>
指令在用于代理請求時,也有類似表現(xiàn)。但當非正則表達式版本的<Location>
作用于非代理請求時,它會將多個毗鄰的斜線認作單個斜線。比如,如果您指定了<Location /abc/def>
而請求是指向"/abc//def
"的,那么它們就是匹配的。
說明 | 將封裝的指令作用于正則表達式匹配的URL |
---|---|
語法 | <LocationMatch
regex> ... </LocationMatch> |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
<LocationMatch>
和<Location>
指令相同,提供了基于URL的訪問控制。但它使用正則表達式作為參數,而不是簡單字符串。比如:
<LocationMatch "/(extra|special)/data">
將匹配包含子串"/extra/data
"或"/special/data
"的URL。
說明 | 控制錯誤日志的詳細程度 |
---|---|
語法 | LogLevel level |
默認值 | LogLevel warn |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
LogLevel
用于調整記錄在錯誤日志中的信息的詳細程度。(參見ErrorLog
指令)?梢赃x擇下列level,依照重要性降序排列:
Level | 描述 | 例子 |
---|---|---|
emerg | 緊急(系統(tǒng)無法使用) | "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 ..." |
當指定了某個級別時,所有級別高于它的信息也會被同時記錄。比如,指定 LogLevel info
,則所有notice
和warn
級別的信息也會被記錄。
建議至少使用crit
級別。
示例如下:
LogLevel notice
當錯誤日志是一個單獨分開的正式文件的時候,notice
級別的消息總是會被記錄下來,而不能被屏蔽。但是,當使用syslog
來記錄時就沒有這個問題。
說明 | 一個持久鏈接中允許的最大請求數量 |
---|---|
語法 | MaxKeepAliveRequests number |
默認值 | MaxKeepAliveRequests 100 |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
MaxKeepAliveRequests
指令限制了當啟用KeepAlive
時,每個連接允許的請求數量。如果將此值設為"0
",將不限制請求的數目。我們建議最好將此值設為一個比較大的值,以確保最優(yōu)的服務器性能。
例如:
MaxKeepAliveRequests 500
說明 | 為一個基于域名的虛擬主機指定一個IP地址(和端口) |
---|---|
語法 | NameVirtualHost addr[:port] |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
如果您要配置基于域名的虛擬主機,NameVirtualHost
指令就是您必須的指令之一。
盡管addr參數可以使用主機名,但建議您還是使用IP地址。比如:
NameVirtualHost 111.22.33.44
使用NameVirtualHost
指令,您可以指定一個基于域名的虛擬主機將使用哪個IP地址來接受請求。在一個防火墻或是其它代理接受了請求并把它轉到服務器所在的另外一個IP地址上的情況下,您必須指定伺服請求的機器物理界面上的IP地址。如果您對于多個地址使用了多個基于域名的虛擬主機,您應該為每個地址使用這個指令。
"主服務器"和任何其它"_default_
"服務器都不會伺服發(fā)送到NameVirtualHost
IP地址的請求。(除非您指定了NameVirtualHost
,但沒有為這個地址指定任何VirtualHost
)。
另外,您還可以為您使用的基于域名的虛擬主機指定一個端口號。比如:
NameVirtualHost 111.22.33.44:8080
IPv6地址必須封裝在一對方括號內,如下例所示:
NameVirtualHost [2001:db8::a00:20ff:fea7:ccea]:8080
為了接受所有界面的請求,您可以使用"*
":
NameVirtualHost *
<VirtualHost>
指令的參數請注意,<VirtualHost>
指令的參數必須與NameVirtualHost
指令的參數完全匹配。
NameVirtualHost 1.2.3.4
<VirtualHost 1.2.3.4>
# ...
</VirtualHost>
說明 | 配置在特定目錄中可以使用哪些特性 |
---|---|
語法 | Options [+|-]option [[+|-]option] ... |
默認值 | Options All |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | Options |
狀態(tài) | 核心(C) |
模塊 | core |
Options
指令控制了在特定目錄中將使用哪些服務器特性。
option可以為None
,在這種情況下,將不啟用任何額外特性;蛟O置為以下選項中的一個或多個:
All
MultiViews
之外的所有特性。這是默認設置。ExecCGI
mod_cgi
執(zhí)行CGI腳本。FollowSymLinks
注意:即使服務器會使用符號連接,但它不會改變用于匹配<Directory>
段的路徑名。
注意:如果此配置位于<Location>
配置段中,則此設置會被忽略。
Includes
mod_include
提供的服務器端包含。IncludesNOEXEC
#exec cmd
"和"#exec cgi
"。但仍可以從ScriptAlias
目錄使用"#include virtual
"虛擬CGI腳本。Indexes
DirectoryIndex
(例如:index.html
),那么服務器會返回由mod_autoindex
生成的一個格式化后的目錄列表。MultiViews
mod_negotiation
提供內容協(xié)商的"多重視圖"(MultiViews)。SymLinksIfOwnerMatch
<Location>
配置段中,此選項將被忽略。一般來說,如果一個目錄被多次設置了Options
,則最特殊的一個會被完全接受(其它的被忽略),而各個可選項的設定彼此并不融合(參見配置段的合并)。然而,如果所有作用于Options
指令的可選項前都加有"+
"或"-
"符號,此可選項將被合并。所有前面加有"+
"號的可選項將強制覆蓋當前的可選項設置,而所有前面有"-
"號的可選項將強制從當前可選項設置中去除。
比如,沒有任何"+
"或"-
"符號:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options Includes
</Directory>
那么只有將Includes
設置到/web/docs/spec
目錄上。然而如果第二個Options
指令使用了"+
"和"-
"符號:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>
那么就會有FollowSymLinks
和Includes
設置到/web/docs/spec
目錄上。
使用 -IncludesNOEXEC
或 -Includes
時,不論前面如何設置,都會完全禁用服務器端包含。
沒有其它設置時,默認設置為 All
。
說明 | 指定哪些認證用戶允許訪問該資源 |
---|---|
語法 | Require entity-name [entity-name] ... |
作用域 | directory, .htaccess |
覆蓋項 | AuthConfig |
狀態(tài) | 核心(C) |
模塊 | core |
這個指令指定哪些認證用戶允許訪問該資源。這些限制由授權支持模塊實現(xiàn)。語法如下:
Require user userid [userid] ...
Require group group-name [group-name] ...
Require valid-user
提供Require
指令的授權支持模塊有:mod_authz_user
, mod_authz_groupfile
, mod_authnz_ldap
, mod_authz_dbm
, mod_authz_owner
。
Require
必須伴隨AuthName
和AuthType
指令,以及諸如AuthUserFile
和AuthGroupFile
指令(用以定義用戶和用戶組)以確保其能夠正確工作。例如:
AuthType Basic
AuthName "Restricted Resource"
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin
使用這種方法提供的訪問控制對所有方法都有效。這是一般情況下期望達到的效果。如果您僅希望對某個特定的方法加以限制,而不涉及其它方法時,您可以將Require
語句放入<Limit>
配置段中。
如果Require
與Allow
或Deny
指令同時使用,那么這些指令之間的相互作用由Satisfy
指令控制。
下面的例子展示了如何使用Satisfy
指令在一個受保護的目錄下的子目錄中取消訪問控制。使用這種方法必須十分小心,因為它取消了mod_authz_host
實現(xiàn)的任何訪問控制。
<Directory /path/to/protected/>
Require user david
</Directory>
<Directory /path/to/protected/unprotected>
# 該目錄下的所有認證和訪問控制都被取消了
Satisfy Any
Allow from all
</Directory>
說明 | 限制Apache子進程派生的進程占用CPU的最大秒數 |
---|---|
語法 | RLimitCPU seconds|max [seconds|max] |
默認值 | 未定義,使用操作系統(tǒng)默認值 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
使用一個或兩個參數。第一個參數設置了所有進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數均可設置為一個數值或是"max
"以表示設置為操作系統(tǒng)允許的最大值。增大此資源限制最大值需要以root
運行服務器或是在初始化啟動語句中進行設置。
這個限制將作用于Apache子進程服務的請求所衍生出的進程,而不是Apache子進程本身。這個范圍包括CGI腳本和SSI執(zhí)行命令,但不包括所有從Apache父進程衍生出的進程。比如管道日志。
CPU資源限制表示為每進程占用的秒數。
說明 | 限制由Apache子進程派生的進程占用的最大內存字節(jié)數 |
---|---|
語法 | RLimitMEM bytes|max [bytes|max] |
默認值 | 未定義,使用操作系統(tǒng)默認值 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
使用一個或兩個參數。第一個參數設置了所有進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數均可設置為一個數值或是"max
"以表示設置為操作系統(tǒng)允許的最大值。增大此資源限制最大值需要以root
運行服務器或是在初始化啟動語句中進行設置。
這個限制將作用于Apache子進程服務的請求所衍生出的進程,而不是Apache子進程本身。這個范圍包括CGI腳本和SSI執(zhí)行命令,但不包括所有從Apache父進程衍生出的進程。比如管道日志。
內存資源限制表示為每進程占用的字節(jié)數。
說明 | 限制由Apache子進程派生的進程所派生的進程數目 |
---|---|
語法 | RLimitNPROC number|max [number|max] |
默認值 | 未定義,使用操作系統(tǒng)默認值 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
使用一個或兩個參數。第一個參數設置了所有進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數均可設置為一個數值或是"max
"以表示設置為操作系統(tǒng)允許的最大值。增大此資源限制最大值需要以root
運行服務器或是在初始化啟動語句中進行設置。
這個限制將作用于Apache子進程服務的請求所衍生出的進程,而不是Apache子進程本身。這個范圍包括CGI腳本和SSI執(zhí)行命令,但不包括所有從Apache父進程衍生出的進程。比如管道日志。
進程限制控制了每個用戶的進程數。
如果CGI進程不是以web服務器的uid啟動的,那么這個指令將限制服務器自己能夠創(chuàng)建的進程數目。此種情況將在error_log
中以"cannot fork
"進行記錄。
說明 | 主機級別的訪問控制和用戶認證之間的相互關系 |
---|---|
語法 | Satisfy Any|All |
默認值 | Satisfy All |
作用域 | directory, .htaccess |
覆蓋項 | AuthConfig |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 2.0.51及以后版本中受<Limit> 和<LimitExcept> 指令影響 |
同時使用Allow
和Require
時的訪問策略。參數可以設置為 All
或 Any
。這個指令僅在某個特定區(qū)域的訪問控制同時被用戶名/密碼和客戶端主機地址進行限定的時候起作用。默認行為(All
)采取客戶端首先通過地址訪問限制并且輸入有效的用戶名和密碼的方式。使用可選項 Any
將使客戶端在通過主機限制或是輸入一個有效的用戶名和密碼兩種方式之一得到訪問權限。這樣,就可以通過密碼來限制一個區(qū)域的訪問,但允許某些特定地址的客戶端訪問時不需要輸入密碼。
比如,如果您想讓您局域網內的用戶訪問您的web網站時不受限制,但局域網外的用戶需提供密碼才能進行訪問,您可以采取類似如下的配置:
Require valid-user
Allow from 192.168.1
Satisfy Any
從2.0.51版本開始,Satisfy
指令可以被限定于由<Limit>
和<LimitExcept>
配置段指定的特定的方法。
說明 | 定位CGI腳本解釋器 |
---|---|
語法 | ScriptInterpreterSource Registry|Registry-Strict|Script |
默認值 | ScriptInterpreterSource Script |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅用于Win32;Registry-Strict 選項僅在 Apache 2.0 及以后的版本中可用 |
這個指令控制Apache如何找到運行CGI腳本的解釋器。默認為Script
,使用在腳本中以"#!
"行指定的解釋器。在Win32上這一行通常看上去像:
#!C:/Perl/bin/perl.exe
或者,如果perl
的位置已經在PATH
中指定,則可以簡單的寫成:
#!perl
設置為 ScriptInterpreterSource Registry
將使用腳本文件擴展名(比如.pl
)作為搜索項對Windows注冊表項HKEY_CLASSES_ROOT
進行搜索。 這個命令由注冊表子鍵Shell\ExecCGI\Command
或Shell\Open\Command
定義(如果前者不存在)。如果無法找到該注冊表項,Apache將采用默認值:Script
。
將 ScriptInterpreterSource Registry
和使用了ScriptAlias
的目錄一起使用時需要非常小心,因為Apache會執(zhí)行這個目錄下的所有文件。Registry
設置可能會導致對不可執(zhí)行文件的不期望的程序調用。例如,在大多數Windows上默認打開.htm
文件的程序是IE,所以任何一個對腳本目錄中.htm
文件的請求將會在服務器后臺打開一個IE。這是一個讓你的服務器在數分鐘內崩潰的好辦法。
Registry-Strict
選項和Registry
差不多,但是只使用Shell\ExecCGI\Command
子鍵。ExecCGI
鍵不是一個普通的鍵。它必須在注冊表中手動配置,從而可以防止意外的程序調用。
說明 | 服務器返回給客戶端的錯誤信息中包含的管理員郵件地址 |
---|---|
語法 | ServerAdmin email-address|URL |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
ServerAdmin
設置了在所有返回給客戶端的錯誤信息中包含的管理員郵件地址。如果httpd
不能將提供的參數識別為URL,它就會假定它是一個email-address ,并在超連接中用在mailto:
后面。推薦使用一個Email地址,因為許多CGI腳本是這樣認為的。如果你確實想使用URL,一定要保證指向一個你能夠控制的服務器,否則用戶將無法確保一定可以和你取得聯(lián)系。
為這個目的專門設置一個郵箱是值得的,比如:
ServerAdmin www-admin@foo.example.com
因為用戶一般不會注意到他們在討論服務器的問題!
說明 | 匹配一個基于域名的虛擬主機的別名 |
---|---|
語法 | ServerAlias hostname [hostname] ... |
作用域 | virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
ServerAlias
指令設定主機的別名,用于基于域名的虛擬主機。
<VirtualHost *>
ServerName server.domain.com
ServerAlias server server2.domain.com server2
# ...
</VirtualHost>
說明 | 服務器用于辨識自己的主機名和端口號 |
---|---|
語法 | ServerName fully-qualified-domain-name[:port] |
作用域 | server config, virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 在2.0版中,這個指令代替了1.3版的Port 指令的功能 |
ServerName
指令設置了服務器用于辨識自己的主機名和端口號。這主要用于創(chuàng)建重定向URL。比如,一個放置web服務器的主機名為simple.example.com
,但同時有一個DNS別名www.example.com
。而您希望web服務器更顯著一點,您可以使用如下的指令:
ServerName www.example.com:80
當沒有指定ServerName
時,服務器會嘗試對IP地址進行反向查詢來推斷主機名。如果在ServerName
中沒有指定端口號,服務器會使用接受請求的那個端口。為了加強可靠性和可預測性,您應該使用ServerName
顯式的指定一個主機名和端口號。
如果使用的是基于域名的虛擬主機,在<VirtualHost>
段中的ServerName
將是為了匹配這個虛擬主機,在"Host:
"請求頭中必須出現(xiàn)的主機名。
參見UseCanonicalName
和UseCanonicalPhysicalPort
指令以獲得關于自引用URL(比如使用mod_dir
模塊)是需要指定一個特定端口,還是使用客戶端請求的端口號的更詳細的信息。
說明 | 為兼容性不好的瀏覽器訪問基于域名的虛擬主機保留的URL路徑名 |
---|---|
語法 | ServerPath URL-path |
作用域 | virtual host |
狀態(tài) | 核心(C) |
模塊 | core |
ServerPath
指令為主機設置了保守的(legacy)URL路徑名,用于和基于域名的虛擬主機配合使用。
說明 | 安裝服務器的基礎目錄 |
---|---|
語法 | ServerRoot directory-path |
默認值 | ServerRoot /usr/local/apache |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
ServerRoot
指令設置了服務器所在的目錄。一般來說它將包含conf/
和logs/
子目錄。其它配置文件的相對路徑即基于此目錄 (比如Include
或LoadModule
)。
ServerRoot /home/httpd
httpd
的 -d
選項ServerRoot
權限的部分說明 | 配置服務器生成頁面的頁腳 |
---|---|
語法 | ServerSignature On|Off|EMail |
默認值 | ServerSignature Off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | All |
狀態(tài) | 核心(C) |
模塊 | core |
ServerSignature
指令允許您配置服務器端生成文檔的頁腳(錯誤信息、mod_proxy
的ftp目錄列表、mod_info
的輸出)。您啟用這個頁腳的原因主要在于處于一個代理服務器鏈中的時候,用戶基本無法辨識出究竟是鏈中的哪個服務器真正產生了返回的錯誤信息。
默認的 Off
設置沒有錯誤行(這樣便與Apache1.2及更舊版本兼容)。采用 On
會簡單的增加一行關于服務器版本和正在伺服的虛擬主機的ServerName
,而 EMail
設置會如文檔中說明的那樣額外創(chuàng)建一個指向ServerAdmin
的"mailto:"部分。
對于2.0.44以后的版本,顯示的詳細服務器版本號將由ServerTokens
指令控制。
說明 | 配置"Server: "應答頭 |
---|---|
語法 | ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full |
默認值 | ServerTokens Full |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
這個指令控制了服務器回應給客戶端的"Server:
"應答頭是否包含關于服務器操作系統(tǒng)類型和編譯進的模塊描述信息。
ServerTokens Prod[uctOnly]
Server: Apache
ServerTokens Major
Server: Apache/2
ServerTokens Minor
Server: Apache/2.0
ServerTokens Min[imal]
Server: Apache/2.0.41
ServerTokens OS
Server: Apache/2.0.41 (Unix)
ServerTokens Full
(或未指定)Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
此設置將作用于整個服務器,而且不能用在虛擬主機的配置段中。
2.0.44版本以后,這個指令還控制著ServerSignature
指令的顯示內容。
說明 | 強制所有匹配的文件被一個指定的處理器處理 |
---|---|
語法 | SetHandler handler-name|None |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 在Apache2.0中移入核心 |
當這個指令放入.htaccess
或<Directory>
或<Location>
配置段中時,這個指令將強制所有匹配的文件通過handler-name指定的處理器處理。比如:如果想不管某個目錄中的文件具有什么擴展名,都將它作為圖像映射規(guī)則文件來解析,您可以將下例放入那個目錄的.htaccess
中:
SetHandler imap-file
再來一個例子:如果您想當http://servername/status
被請求時,服務器顯示一個狀態(tài)報告,您可以將下面的語句放入httpd.conf
里面:
<Location /status>
SetHandler server-status
</Location>
你可以通過使用 None
來改寫一個早先定義的SetHandler
指令。
說明 | 設置處理客戶端請求和POST輸入時使用的過濾器 |
---|---|
語法 | SetInputFilter filter[;filter...] |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
SetInputFilter
指令為服務器接受并處理客戶端請求和POST輸入設置了過濾器。這是在其它地方(包括AddInputFilter
指令)設置的過濾器以外附加的過濾器。
如果設置了多于一個過濾器,它們必須按照處理內容的順序用分號(;)分隔。
說明 | 設置用于處理服務器輸出應答的過濾器 |
---|---|
語法 | SetOutputFilter filter[;filter...] |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 核心(C) |
模塊 | core |
SetOutputFilter
指令設置了用于在服務器應答發(fā)送到客戶端之前使用的過濾器。這是在其它地方(包括AddOutputFilter
指令)設置的過濾器以外附加的過濾器。
例如:下述配置將會把/www/data/
目錄下的所有文件作為SSI文件來處理。
<Directory /www/data/>
SetOutputFilter INCLUDES
</Directory>
如果設置了多于一個過濾器,它們必須按照處理內容的順序用分號(;)分隔。
說明 | 服務器在斷定請求失敗前等待的秒數 |
---|---|
語法 | TimeOut seconds |
默認值 | TimeOut 300 |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
TimeOut
指令用于設置Apache等待以下三種事件的時間長度:
我們計劃在發(fā)展里程中,逐步把它們分別變得更易配置。計時器在1.2版本之前的默認值為1200,而現(xiàn)在已經設置為300了,但對于絕大多數情況來說仍是足夠的。沒有把它默認值設的更小的原因在于代碼里還有點問題:有時發(fā)送一個包之后,計時器沒有復位。
說明 | 確定如何處理TRACE 請求 |
---|---|
語法 | TraceEnable [on|off|extended] |
默認值 | TraceEnable on |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 1.3.34, 2.0.55 及以后的版本中可用 |
這個指令同時決定了核心和mod_proxy
模塊如何處理TRACE
請求。默認(TraceEnable on
)允許處理RFC2616定義的禁止附帶任何請求體的TRACE
請求。TraceEnable off
則使核心和mod_proxy
模塊向客戶端返回一個"405
"(禁止的方法)錯誤。
最后,為了測試和診斷,可以設置"TraceEnable extended
"以允許附帶請求體。核心(原始服務器)將會將請求體大小限制為64k以下(如果使用了 Transfer-Encoding: chunked
頭,可以再為HTTP頭增加8k)。核心會同時限制應答頭和應答體;代理服務器則沒有對請求體加以64k的限制。
說明 | 配置服務器如何確定它自己的域名和端口 |
---|---|
語法 | UseCanonicalName On|Off|DNS |
默認值 | UseCanonicalName Off |
作用域 | server config, virtual host, directory |
狀態(tài) | 核心(C) |
模塊 | core |
在很多情況下,Apache必須構造一個自引用URL(即一個指回相同服務器的URL)。使用 UseCanonicalName On
會將ServerName
這個域名用于所有自引用URL、SERVER_NAME
、CGI中的SERVER_PORT
。
設置為 UseCanonicalName Off
時,如果客戶端提供了主機名和端口(否則將如上所述使用標準域名),Apache將會使用這些信息來構建自引用URL。這些值與用于實現(xiàn)基于域名的虛擬主機的值相同,并且對于同樣的客戶端可用。CGI變量SERVER_NAME
和SERVER_PORT
也會由客戶端提供的值來構建。
用這樣的方式成功解決問題的例子如下:在一個局域網內,您想讓連接主機的用戶使用諸如www
這樣的短域名進行訪問。您會注意到,如果用戶鍵入了類似http://www/splat
這樣的短域名和目錄的URL,并且沒有最后的斜線,Apache會將他們重定向到http://www.domain.com/splat/
。如果您在這個目錄上啟用了身份驗證,這會導致用戶必須進行兩次驗證:一次針對www
而另外一次針對www.domain.com
(參見關于此主題的FAQ獲得更多信息)。但如果UseCanonicalName
設為 Off
,Apache就會重定向到http://www/splat/
。
第三個可選項是 UseCanonicalName DNS
,用于為大量基于IP的虛擬主機支持那些古董級的不提供"Host:
"頭的瀏覽器使用。使用這個選項時,Apache將對客戶端連入的服務器的IP地址進行反向DNS查詢,以構建自引用URL。
如果CGI對SERVER_NAME
的值作出了假定,它們會被此選項破壞?蛻舳藢τ诮o出它們想要的主機名這樣的行動是完全不受限制的。但如果CGI僅使用SERVER_NAME
來構建自引用的URL,它們會工作的很好。
說明 | 配置服務器如何確定自己的名字和端口 |
---|---|
語法 | UseCanonicalPhysicalPort On|Off |
默認值 | UseCanonicalPhysicalPort Off |
作用域 | server config, virtual host, directory |
狀態(tài) | 核心(C) |
模塊 | core |
兼容性 | 僅在 Apache 2.2.0 及以后的版本中可用 |
在很多情況下,Apache必須構造一個自引用URL(即一個指回相同服務器的URL)。在 UseCanonicalPhysicalPort On
的時候,Apache將有可能在構造服務器的規(guī)范端口時為了符合UseCanonicalName
指令而使用實際的物理端口號(physical port)。在 UseCanonicalPhysicalPort Off
的時候,Apache將不會使用實際的物理端口號,而是依賴所有已經配置的信息來構造一個合法的端口號。
決定使用物理端口號的次序如下:
UseCanonicalName On
Servername
指定的端口號UseCanonicalName Off | DNS
Host:
"請求頭提供的端口號Servername
指定的端口號在 UseCanonicalPhysicalPort Off
的情況下,物理端口號將會從上述順序中剔除。
說明 | 包含僅作用于指定主機名或IP地址的指令 |
---|---|
語法 | <VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> |
作用域 | server config |
狀態(tài) | 核心(C) |
模塊 | core |
<VirtualHost>
和</VirtualHost>
用于封裝一組僅作用于特定虛擬主機的指令。任何在虛擬主機配置中可以使用的指令也同樣可以在這里使用。當服務器接受了一個特定虛擬主機的文檔請求時,它會使用封裝在<VirtualHost>
配置段中的指令。Addr可以是:
*
",僅與"NameVirtualHost *
"配合使用以匹配所有的IP地址_default_
",與基于IP的虛擬主機聯(lián)用以捕獲所有沒有匹配的IP地址
<VirtualHost 10.1.2.3>
ServerAdmin webmaster@host.foo.com
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>
IPv6的地址必須放入方括號中指定,否則作為可選項的端口號將無法確定。一個IPv6的示例如下:
<VirtualHost [2001:db8::a00:20ff:fea7:ccea]>
ServerAdmin webmaster@host.example.com
DocumentRoot /www/docs/host.example.com
ServerName host.example.com
ErrorLog logs/host.example.com-error_log
TransferLog logs/host.example.com-access_log
</VirtualHost>
每個虛擬主機必須對應不同的IP地址、端口號或是不同的主機名。在第一種情況下,服務器所在的物理機器必須配置為可以為多個IP地址接受IP包。(在機器沒有多個網絡硬件界面的情況下,如果您的操作系統(tǒng)支持,您可以使用 ifconfig alias
命令來達到這個目的)。
<VirtualHost>
的使用并不影響Apache的監(jiān)聽地址。你需要使用Listen
來確保Apache正在監(jiān)聽正確的地址。
當使用基于IP的虛擬主機時,特殊的名稱"_default_
"可以在沒有匹配到其它列出的虛擬主機的情況下作為匹配任何IP地址的默認虛擬主機。在沒有進行"_default_
"虛擬主機的設定時,在沒有IP與請求匹配的情況下,將使用"主服務器"(在所有虛擬主機配置段之外)的配置。但請注意:任何匹配NameVirtualHost
指令的IP地址既不會使用"主服務器"配置,也不會使用"_default_
"虛擬主機的配置。參見基于域名的虛擬主機文檔。
您可以指定一個":port
"來改變匹配的端口。如果沒有指定,它將沿用主服務器中離它最近的那個Listen
指定的值。您也可以指定":*
"來匹配那個地址上的所有端口(當您使用"_default_
"時,這是推薦采用的方法)。
參見安全提示文檔以獲得為什么當您存儲日志文件的目錄對于啟動服務器以外的用戶來說是可寫的會危及服務器安全的詳細資料。