<-
Apache > HTTP Server > 文件 > 版本 2.4 > 特定平台的說明

在 Microsoft Windows 上使用 Apache HTTP Server

可用的語言: en  |  fr  |  ko 

本文檔說明如何在 Microsoft Windows 下安裝、設定和執行 Apache 2.4。如果您在檢閱文件(以及任何事件和錯誤記錄)後有問題,您應諮詢對等支援的使用者郵寄清單

本文檔假設您正在安裝 Apache 的二進位發行版。如果您想自己編譯 Apache(可能是為了協助開發或追蹤錯誤),請參閱針對 Microsoft Windows 編譯 Apache

Support Apache!

另請參閱

top

作業系統需求

執行 Apache 2.4 的主要 Windows 平台是 Windows 2000 或更新版本。請務必取得並安裝最新的服務套件,以避免作業系統錯誤。

Apache HTTP Server 2.2 以上的版本不會在任何早於 Windows 2000 的作業系統上執行。
top

下載 Apache for Windows

Apache HTTP Server 專案本身不提供軟體的二進位版本,只有原始碼。個別提交者可能會提供二進位套件供方便使用,但這並非版本交付品。

如果您無法自行編譯 Apache HTTP Server,您可以從網路上提供的許多二進位發行版本取得二進位套件。

在 Microsoft Windows 上部署 Apache httpd 以及(選擇性地)PHP 和 MySQL 的熱門選項包括

top

自訂 Apache for Windows

Apache 是根據 conf 子目錄中的檔案進行設定。這些檔案與用於設定 Unix 版本的檔案相同,但在 Windows 上的 Apache 有一些不同的指令。請參閱 指令索引 以取得所有可用的指令。

原始發行版的預設設定預期伺服器會安裝到 \Apache24。這可以在編譯時自訂,但重要的是,最終在 httpd.conf 中的 ServerRoot 中的內容與實際安裝的根目錄相符。二進位發行版可能會自訂預設的安裝根目錄或最初設定的整體配置。

Windows 上 Apache 的主要差異如下

top

以服務方式執行 Apache

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.4NET 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 存取網路資源,則這是必需的。

  1. 建立一個正常的網域使用者帳戶,並務必記住密碼。
  2. 授予新建立的使用者 以服務身分登入扮演作業系統一部份 的權限。在 Windows NT 4.0 上,這些權限會透過使用者管理員 for Domains 授予,但 Windows 2000 和 XP 上則可能會想要使用群組原則來宣傳這些設定。也可以從「本機安全性原則」MMC 附加元件手動設定這些權限。
  3. 確認已建立的帳戶是「使用者」群組的成員。
  4. 授予該帳戶對所有文件與指令碼資料夾(例如 htdocscgi-bin)讀取與執行 (RX) 權限。
  5. 授予該帳戶變更 (RWXD) 權限,以使用 Apache logs 目錄。
  6. 授予該帳戶對 httpd.exe 二進位可執行檔讀取與執行 (RX) 權限。
授予該使用者執行 Apache 服務所讀取與執行 (RX) 整個 Apache2.4 目錄,除了 logs 子目錄,該處使用者至少需要變更 (RWXD) 權限。

如果您允許該帳戶作為使用者和服務登入,則可以使用該帳戶登入,並測試該帳戶是否擁有執行指令碼、讀取網頁的權限,以及能否在主控台視窗中啟動 Apache。如果可行,且您已執行上述步驟,Apache 應該可以執行,且無任何問題作為服務。

錯誤代碼 2186 表示您需要檢閱服務的「登入身分」設定,因為 Apache 無法存取必要的網路資源。此外,請特別注意設定為執行 Apache 的使用者的權限。

當以服務身分啟動 Apache 時,您可能會從 Windows 服務控制管理員收到錯誤訊息。例如,如果嘗試使用 Windows 控制面板中的「服務」小應用程式啟動 Apache,可能會收到以下訊息

無法在 \\COMPUTER 上啟動 Apache2.4 服務
錯誤 1067;處理程序意外終止。

在啟動 Apache 服務時出現任何問題,您都會收到這個一般性錯誤。為了查看真正導致問題的原因,您應該遵循從命令提示字元執行 Apache for Windows 的說明。

如果您遇到服務問題,建議您遵循下列說明,嘗試從主控台視窗啟動 httpd.exe,並在再次嘗試以服務身分啟動時解決錯誤。

top

以主控台應用程式執行 Apache

以服務身分執行 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

如果伺服器作為服務執行。

給熟悉 Apache Unix 版的人員的注意事項:這些指令提供了 Windows 等效於 kill -TERM pidkill -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 時了解它將如何找到設定檔非常重要。您可以透過兩種方式在指令列中指定設定檔

在這兩個情況下,都應在設定檔中設定正確的 ServerRoot

如果你不使用-f-n指定設定檔,Apache 會使用編譯至伺服器中的檔案名稱,例如下列的conf\httpd.conf。此內建路徑是相對於安裝目錄。你可以用類似下面這樣的方式,使用-V參數呼叫 Apache 來驗證已編譯的檔案名稱,該名稱會作為標示SERVER_CONFIG_FILE的值

httpd.exe -V

Apache 會以下列順序嘗試找出它的ServerRoot

  1. 透過-C命令列參數指定的ServerRoot指令。
  2. 命令列中的-d參數。
  3. 目前的執行目錄。
  4. 執行二進制檔安裝時產生的登錄檔項目。
  5. 編譯至伺服器中的伺服器根目錄。它的預設值是 /apache,你可以使用 httpd.exe -V 來驗證它,尋找標示為 HTTPD_ROOT 的值。

如果你沒有執行二進制檔安裝,Apache 有時會抱怨找不到登錄檔金鑰。如果伺服器另一方面可以找到它的設定檔,可以忽略此警告。

此金鑰的值是包含conf子目錄的ServerRoot目錄。Apache 在啟動時會從該目錄讀取 httpd.conf 檔案。如果此檔案包含和上述登錄檔金鑰中所取得的目錄不同的ServerRoot指令,Apache 會忽略登錄檔金鑰,而從設定檔中使用該目錄。如果你將 Apache 目錄或設定檔複製到新的位置,至關重要的是你要更新 httpd.conf 檔案中的ServerRoot指令,以反映新的位置。

top

測試安裝

在開始 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 來嘗試繞過防火牆議題。

top

設定網路資源存取

存取網路上的檔案可以使用 Windows 提供的兩種機制

對應的磁碟機代號
例如: Alias "/images/" "Z:/"
UNC 路徑
例如: Alias "/images/" "//imagehost/www/images/"

對應的磁碟機代號允許管理員在 Apache httpd 設定檔外維護對特定機器和路徑的對應。但是,這些對應僅與互動式工作階段相關聯,且當 Apache httpd 作為服務啟動時不會直接提供給它。只對 httpd.conf 中的網路資源使用 UNC 路徑,如此一來便可以一致地存取資源,而不用考慮 Apache httpd 是如何啟動的。(神秘且容易出錯的程序可能會解決對應磁碟機代號的限制,但這不建議執行。)

範例:使用 UNC 路徑的文件根目錄

DocumentRoot "//dochost/www/html/"

範例:使用 UNC 路徑中 IP 位址的文件根目錄

DocumentRoot "//192.168.1.50/docs/"

範例:Alias 和對應目錄(使用 UNC 路徑)

Alias "/images/" "//imagehost/www/images/"

<Directory "//imagehost/www/images/">
#...
</Directory>

在以服務身分執行 Apache httpd 時,您必須建立一個獨立的帳戶,才能存取如上說明的網路資源。

top

Windows 調整

可用的語言: en  |  fr  |  ko 

top

意見

注意事項
本頁面並非 Q&A 區段。刊登於此的評論應針對改善文件或伺服器的建議,若該建議已執行或被視為無效/離題,我們的版主可能會移除。關於如何管理 Apache HTTP Server 的問題應導向我們的 IRC 頻道、Libera.chat 上的 #httpd,或發送至我們的 郵件清單