Apache HTTP Server 版本 2.4
本文檔說明如何在 Microsoft Windows 下安裝、設定和執行 Apache 2.4。如果您在檢閱文件(以及任何事件和錯誤記錄)後有問題,您應諮詢對等支援的使用者郵寄清單。
本文檔假設您正在安裝 Apache 的二進位發行版。如果您想自己編譯 Apache(可能是為了協助開發或追蹤錯誤),請參閱針對 Microsoft Windows 編譯 Apache。
執行 Apache 2.4 的主要 Windows 平台是 Windows 2000 或更新版本。請務必取得並安裝最新的服務套件,以避免作業系統錯誤。
Apache HTTP Server 專案本身不提供軟體的二進位版本,只有原始碼。個別提交者可能會提供二進位套件供方便使用,但這並非版本交付品。
如果您無法自行編譯 Apache HTTP Server,您可以從網路上提供的許多二進位發行版本取得二進位套件。
在 Microsoft Windows 上部署 Apache httpd 以及(選擇性地)PHP 和 MySQL 的熱門選項包括
Apache 是根據 conf
子目錄中的檔案進行設定。這些檔案與用於設定 Unix 版本的檔案相同,但在 Windows 上的 Apache 有一些不同的指令。請參閱 指令索引 以取得所有可用的指令。
原始發行版的預設設定預期伺服器會安裝到 \Apache24。這可以在編譯時自訂,但重要的是,最終在 httpd.conf 中的 ServerRoot
中的內容與實際安裝的根目錄相符。二進位發行版可能會自訂預設的安裝根目錄或最初設定的整體配置。
Windows 上 Apache 的主要差異如下
由於 Windows 上的 Apache 是多執行緒的,因此它不會為每個要求使用一個獨立程序,就像 Apache 在 Unix 上一樣。取而代之的是,通常只會執行兩個 Apache 程序:父程序和處理要求的子程序。在子程序內,每個要求會由一個獨立的執行緒來處理。
程序管理指令也有所不同
MaxConnectionsPerChild
:就像 Unix 指令一樣,此指令會控制一個子程序將提供多少連線服務,然後才會退出。不過,與 Unix 不同的是,更換的程序並不會立即用於變更。請使用預設的 MaxConnectionsPerChild 0
,除非指示變更行為以克服第三方模組或程序內應用程式的記憶體外洩問題。
httpd.conf
,新的子程序可能不會啟動,或是您可能會收到意外的結果。ThreadsPerChild
:此指令是新的。它告訴伺服器應該使用多少個執行緒。這是伺服器可以同時處理的最大連線數,所以如果您的網站有大量點閱數,請務必將此數字設定得夠高。建議的預設值是 ThreadsPerChild 150
,但必須針對同時接受到的最大預期連線數進行調整。
接受檔案名稱做為參數的指令必須使用 Windows 檔案名稱,而不是 Unix 檔案名稱。不過,由於 Apache 可能將反斜線解譯為「跳脫字元」順序,因此您應該持續在路徑名稱中使用正斜線,而不是反斜線。
雖然檔案名稱在 Windows 上通常不區分大小寫,但 URL 在映射到檔案系統之前,內部仍會區分大小寫。例如,<Location>
、Alias
和 ProxyPass
指令都使用大小寫敏感的參數。因此,使用 <Directory>
指令限制存取檔案系統中的內容時,特別重要,因為這個指令適用於目錄中的任何內容,無論存取方式如何。如果你希望確保 URL 中只使用小寫,可以使用類似以下內容:
RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "%{REQUEST_URI}" "[A-Z]" RewriteRule "(.*)" "${lowercase:$1}" [R,L]
執行時,Apache 只需要對記錄目錄和任何已設定的快取目錄樹具有寫入存取權。由於不區分大小寫和 8.3 格式短檔名的問題,Apache 必須驗證所提供的所有路徑名稱。這表示 Apache 評估的每個目錄,從磁碟機根目錄到目錄葉節點,都必須具有讀取、列出和橫越目錄的權限。如果 Apache2.4 安裝在 C:\Program Files 中,則根目錄、Program Files 和 Apache2.4 都必須對 Apache 可見。
適用於 Windows 的 Apache 內含在執行期間載入模組的能力,而無需重新編譯伺服器。如果以正常方式編譯 Apache,它將在 \Apache2.4\modules
目錄中安裝多個選用模組。若要啟用這些或其他模組,必須使用 LoadModule
指令。例如,若要啟用狀態模組,請使用以下內容(除了 access.conf
中的狀態啟用指令)
LoadModule status_module "modules/mod_status.so"
有關建立可載入模組的資訊也可取得。
Apache 也可以載入 ISAPI(網際網路伺服器應用程式編程介面)延伸模組,例如 Microsoft IIS 和其他 Windows 伺服器所使用的模組。有更多資訊可用。請注意 Apache 無法載入 ISAPI 篩選器,而具有某些 Microsoft 功能延伸模組的 ISAPI 處理常式也無法作用。
在執行 CGI 腳本時,Apache 用來尋找腳本的詮譯器的執行方法可以使用 ScriptInterpreterSource
指令設定。
由於在 Windows 中管理類似 .htaccess
的檔案通常很困難,因此使用 AccessFilename
指令變更這個每個目錄設定檔的名稱可能很有用。
執行 Windows NT 時,Apache 啟動期間發生的任何錯誤將記錄在 Windows 事件記錄中。此機制是為尚未準備好使用 error.log
檔案的情況提供備份。你可以使用事件檢視器檢閱 Windows 應用程式事件記錄,例如開始 - 設定 - 控制台 - 管理工具 - 事件檢視器。
Apache 自帶一個名為 Apache 服務監視器的公用程式。您可以使用它查看和管理網路中任何機器上所有已安裝 Apache 服務的狀態。要使用此監視器管理 Apache 服務,您必須先安裝服務(透過安裝自動進行,或手動安裝)。
可以在 Apache bin
子目錄的命令提示字元下,按照下列步驟將 Apache 安裝為 Windows NT 服務
httpd.exe -k install
如果您需要指定要安裝的服務名稱,請使用下列指令。若您在電腦上安裝了數個 Apache 服務則需要執行此步驟。如果您在安裝期間指定一個名稱,則在任何其他 -k 操作期間也必須指定。
httpd.exe -k install -n "MyServiceName"
如果您需要為不同的服務指定特定的設定檔名稱,則必須使用這個
httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf"
如果您使用第一個命令而沒有任何「-k install」以外的特殊參數,則服務將稱為 Apache2.4
,並且設定檔將假設為 conf\httpd.conf
.
移除 Apache 服務很簡單,只需使用
httpd.exe -k uninstall
可使用下列指令指定要解除安裝的特定 Apache 服務:
httpd.exe -k uninstall -n "MyServiceName"
通常是使用 Apache 服務監視器透過類似於 NET START Apache2.4
和 NET STOP Apache2.4
的命令,或透過一般的 Windows 服務管理方式,對 Apache 服務執行一般的啟動、重新啟動和關閉。在透過任何方式將 Apache 作為服務啟動之前,您應該使用下列方式測試服務的設定檔:
httpd.exe -n "MyServiceName" -t
您也可以透過 Apache 服務的命令列開關來控制它。要啟動已安裝的 Apache 服務,您將使用這個
httpd.exe -k start -n "MyServiceName"
要透過命令列開關停止 Apache 服務,請使用這個
httpd.exe -k stop -n "MyServiceName"
或
httpd.exe -k shutdown -n "MyServiceName"
您也可以重新啟動現有的服務,並強制它重新讀取設定檔,方法是使用
httpd.exe -k restart -n "MyServiceName"
預設情況下,所有 Apache 服務都會註冊為以系統使用者身分執行(LocalSystem
帳戶)。LocalSystem
帳戶透過任何 Windows 安全機制,都無權存取您的網路,包括檔案系統、命名管線、DCOM 或安全 RPC。然而,它在本地具有廣泛的權限。
LocalSystem
帳戶任何網路權限!如果您需要 Apache 能夠存取網路資源,請依照以下說明內容為 Apache 建立一個獨立的帳戶。建議使用者為執行 Apache 服務建立一個獨立的帳戶。如果您必須透過 Apache 存取網路資源,則這是必需的。
以服務身分登入
和 扮演作業系統一部份
的權限。在 Windows NT 4.0 上,這些權限會透過使用者管理員 for Domains 授予,但 Windows 2000 和 XP 上則可能會想要使用群組原則來宣傳這些設定。也可以從「本機安全性原則」MMC 附加元件手動設定這些權限。htdocs
和 cgi-bin
)讀取與執行 (RX) 權限。logs
目錄。httpd.exe
二進位可執行檔讀取與執行 (RX) 權限。logs
子目錄,該處使用者至少需要變更 (RWXD) 權限。如果您允許該帳戶作為使用者和服務登入,則可以使用該帳戶登入,並測試該帳戶是否擁有執行指令碼、讀取網頁的權限,以及能否在主控台視窗中啟動 Apache。如果可行,且您已執行上述步驟,Apache 應該可以執行,且無任何問題作為服務。
當以服務身分啟動 Apache 時,您可能會從 Windows 服務控制管理員收到錯誤訊息。例如,如果嘗試使用 Windows 控制面板中的「服務」小應用程式啟動 Apache,可能會收到以下訊息
無法在 \\COMPUTER 上啟動 Apache2.4 服務
錯誤 1067;處理程序意外終止。
在啟動 Apache 服務時出現任何問題,您都會收到這個一般性錯誤。為了查看真正導致問題的原因,您應該遵循從命令提示字元執行 Apache for Windows 的說明。
如果您遇到服務問題,建議您遵循下列說明,嘗試從主控台視窗啟動 httpd.exe,並在再次嘗試以服務身分啟動時解決錯誤。
以服務身分執行 Apache 通常是建議使用的,但在命令列工作有時候比較輕鬆,特別是在初始設定與測試階段。
若要從命令列以主控台應用程式的身分執行 Apache,請使用以下指令
httpd.exe
Apache 會執行,且會持續執行,直到按 Ctrl-C 停止執行為止。
您也可以在安裝過程中透過功能表「開始」-->「程式集」-->「Apache HTTP Server 2.4.xx」-->「控制 Apache 伺服器」中的「開始 Apache 於主控台」捷徑執行 Apache。這會開啟一個主控台視窗並在其中啟動 Apache。如果您未安裝 Apache 作為服務,視窗將持續顯示直到您在 Apache 執行的主控台視窗中按下 Control-C 來停止 Apache 為止。伺服器將在幾秒後結束執行。但如果您將 Apache 安裝為服務,此捷徑會啟動服務。如果 Apache 服務已在執行,此捷徑不會做任何事。
如果 Apache 作為服務在運行,您可以開啟其他主控台視窗並輸入來指示其停止。
httpd.exe -k shutdown
作為服務執行應優於在主控台視窗中執行,因為這樣 Apache 才可以結束所有目前運作並優雅地清理。
但如果伺服器在主控台視窗中執行,您只能在同一個視窗中按下 Control-C 來停止它。
您也可以指示 Apache 重新啟動。這會強制它重新讀取設定檔。任何進行中的運作都可以沒有中斷地繼續完成。要重新啟動 Apache,可以在用於啟動 Apache 的主控台視窗中按下 Control-Break,或輸入
httpd.exe -k restart
如果伺服器作為服務執行。
kill -TERM pid
和 kill -USR1 pid
。使用的指令列選項 -k
被選定是因為它可以讓 Unix 上使用的 kill
指令想起。p如果 Apache 主控台視窗在啟動後立即或意外關閉,請從開始功能表 --> 程式集開啟命令提示字元。變更到您安裝 Apache 的資料夾,輸入指令 httpd.exe
,並讀取錯誤訊息。然後變更到記錄資料夾並檢閱 error.log
檔案以找出設定錯誤。假設 httpd 已安裝在 C:\Program Files\Apache Software Foundation\Apache2.4\
,您可以執行下列動作
c
cd "\Program Files\Apache Software Foundation\Apache2.4\bin"
httpd.exe
然後等待 Apache 停止,或者按下 Control-C。接著輸入下列內容
cd ..\logs
more < error.log
在使用 Apache 時了解它將如何找到設定檔非常重要。您可以透過兩種方式在指令列中指定設定檔
-f
指定到特定設定檔的絕對或相對路徑
httpd.exe -f "c:\my server files\anotherconfig.conf"
或
httpd.exe -f files\anotherconfig.conf
-n
指定要使用其設定檔的已安裝 Apache 服務
httpd.exe -n "MyServiceName"
在這兩個情況下,都應在設定檔中設定正確的 ServerRoot
。
如果你不使用-f
或-n
指定設定檔,Apache 會使用編譯至伺服器中的檔案名稱,例如下列的conf\httpd.conf
。此內建路徑是相對於安裝目錄。你可以用類似下面這樣的方式,使用-V
參數呼叫 Apache 來驗證已編譯的檔案名稱,該名稱會作為標示SERVER_CONFIG_FILE
的值
httpd.exe -V
Apache 會以下列順序嘗試找出它的ServerRoot
-C
命令列參數指定的ServerRoot
指令。-d
參數。 /apache
,你可以使用 httpd.exe -V
來驗證它,尋找標示為 HTTPD_ROOT
的值。如果你沒有執行二進制檔安裝,Apache 有時會抱怨找不到登錄檔金鑰。如果伺服器另一方面可以找到它的設定檔,可以忽略此警告。
此金鑰的值是包含conf
子目錄的ServerRoot
目錄。Apache 在啟動時會從該目錄讀取 httpd.conf
檔案。如果此檔案包含和上述登錄檔金鑰中所取得的目錄不同的ServerRoot
指令,Apache 會忽略登錄檔金鑰,而從設定檔中使用該目錄。如果你將 Apache 目錄或設定檔複製到新的位置,至關重要的是你要更新 httpd.conf
檔案中的ServerRoot
指令,以反映新的位置。
在開始 Apache(在主控台視窗或作為服務)之後,它會在 port 80 上偵聽(除非你已經在設定檔中變更Listen
指令,或只為目前使用者安裝 Apache)。要連線至伺服器並存取預設頁面,請啟動瀏覽器並輸入以下 URL
https://127.0.0.1/
Apache 應回應一個歡迎頁面,你會看到「It Works!」。如果什麼事情都沒發生或你得到一個錯誤,請檢視logs
子目錄中的error.log
檔案。如果你的主機沒有連線到網路,或你的 DNS(網域名稱服務)設定有嚴重問題,你可能需要使用以下 URL
http://127.0.0.1/
如果你碰巧在另一個 port 上執行 Apache,你需要明確地將它加到 URL 中
http://127.0.0.1:8080/
在基本安裝可運作後,應編輯 conf
子目錄中的檔案以適當設定它。再者,若您變更 Apache 的 Windows NT 服務設定檔,請先在命令行中嘗試啟動它,以確定服務未產生任何錯誤。
由於 Apache 無法 與其他 TCP/IP 應用程式共用同一埠,因此在執行 Apache 前,您可能需要停止、解除安裝或重新設定部分其他服務。這些衝突服務包括其他 WWW 伺服器、部分防火牆實作,甚至某些用戶端應用程式(例如 Skype),它將使用埠 80 來嘗試繞過防火牆議題。
存取網路上的檔案可以使用 Windows 提供的兩種機制
Alias "/images/" "Z:/"
Alias "/images/" "//imagehost/www/images/"
對應的磁碟機代號允許管理員在 Apache httpd 設定檔外維護對特定機器和路徑的對應。但是,這些對應僅與互動式工作階段相關聯,且當 Apache httpd 作為服務啟動時不會直接提供給它。只對 httpd.conf 中的網路資源使用 UNC 路徑,如此一來便可以一致地存取資源,而不用考慮 Apache httpd 是如何啟動的。(神秘且容易出錯的程序可能會解決對應磁碟機代號的限制,但這不建議執行。)
DocumentRoot "//dochost/www/html/"
DocumentRoot "//192.168.1.50/docs/"
Alias "/images/" "//imagehost/www/images/" <Directory "//imagehost/www/images/"> #... </Directory>
在以服務身分執行 Apache httpd 時,您必須建立一個獨立的帳戶,才能存取如上說明的網路資源。
如果在作業系統實例上使用超過數十個通道記錄器,通常需要擴充「桌面堆」。如需更詳盡的資訊,請參閱 管道記錄 文件。