在Microsoft Windows中使用Apache
此文檔闡述了如何在Microsoft Windows平台上安裝、配置和運作Apache 2.2 。 如果你發現了bug,或者希望以其他方式作出貢獻,請使用我們的bug報告頁面。
本文檔的大多數内容假定你是從一個二進制釋出版安裝Apache到Windows上。 如果你想自己編譯Apache(可能有助于開發和跟蹤bugs),參看編譯Windows下的Apache。
基于目前的Windows版本狀況,本文檔使用到的縮寫及其意義解釋包括:
- Windows NT: 指所有基于NT核心的Microsoft Windows作業系統的版本,包括Windows NT, Windows 2000, Windows XP, Windows.NET Server 2003及後續版本。
- Windows 9x: 指所有定位于家庭使用的Microsoft Windows作業系統的版本,包括 Windows 95 , Windows 98, Windows ME 。
對作業系統的要求
Apache 2.2被設計為在Windows NT上運作。它的二進制安裝程式隻能在x86處理器上運作,比如Intel和AMD的晶片。Apache可能也能夠運作在Windows 9x上,但是并沒有經過測試, 也不建議在實際工作的系統上這樣使用。
任何情況下都必須確定TCP/IP網絡協定已經安裝。如果在Windows 95上運作,必須安裝"Winsock2"更新更新檔。 "Winsock2" for Windows 95可以在這裡下載下傳。
如果在NT 4.0上運作,建議安裝Service Pack 6 ,因為Service Pack 4有衆所周知的TCP/IP和Winsock完整性的問題,在以後的Service Pack中解決了這些問題。
下載下傳 Apache for Windows
關于Apache最新版本的有關資訊可以在http://httpd.apache.org/download.cgi上找到。那裡會列出目前發行版本、 所有最近的alpha和beta測試版本以及鏡像web站點和匿名ftp伺服器的資訊。
你應該下載下傳帶有
.msi
擴充名的Apache for Windows版本。 這是一個單一的Microsoft Installer檔案,包含了Apache ,可以立即安裝并運作。 還有一個單獨的
.zip
檔案隻打包了源碼, 可以用Microsoft Visual C++ (Visual Studio)工具來編譯。
安裝 Apache for Windows
Apache的安裝需要有Microsoft Installer 1.2或更高版本。 在Windows 9x中,你可以從這裡更新Microsoft Installer到2.0 ,在Windows NT 4.0和2000中,2.0的更新版在這裡。Windows XP/2003不需要這個更新。
注意,使用這個安裝包不能在同一個機器上安裝兩套Apache 2.2。 但是,在同一個機器上,安裝一個1.3系列和一個2.2系列的Apache則沒有問題。 如果你需要在同一個機器上安裝兩套不同的2.2版本, 則必須用代碼編譯和安裝Apache
運作已下載下傳的上述Apache
.msi
檔案。安裝程式會要求提供下列資訊:
- Network Domain 你的伺服器已經或者将要注冊的DNS域名。比如你的伺服器的全稱DNS域名是
,你應當在這裡輸入:server.mydomain.net
mydomain.net
- Server Name 你的伺服器的全稱DNS域名,如上情況你應當在這裡輸入:
server.mydomain.net
- Administrator's Email Address 伺服器管理者的email位址。這個位址将會在預設的出錯頁面上顯示給用戶端。
- For whom to install Apache 如果你希望Apache在80端口監聽,并被安裝為服務(即使無人登陸,Apache仍将運作),就選擇"
";如果你希望将Apache安裝為個人試驗使用,或者已經有一個運作于80端口的WWW伺服器,就選擇"for All Users, on Port 80, as a Service - Recommended
"。only for the Current User, on Port 8080, when started Manually
- The installation type 選擇
會安裝除開發子產品需要使用的源碼和庫以外的所有内容。選擇Typical
可以自定義安裝哪些項目。完整安裝大約需要13MB磁盤空間,這其中并不包含你的網站檔案所用空間。Custom
- Where to install 安裝Apache的檔案夾,預設為
檔案夾下的C:/Program Files/Apache Software Foundation
子檔案夾。Apache2.2
安裝期間,Apache将會配置你所選擇的安裝目錄下的
conf
檔案夾中的檔案。 但是如果那個目錄下已有同名檔案存在,原有檔案将不會被覆寫, 而相應的新檔案将會被加上
.default
擴充名。 是以,舉例來說,如果
conf/httpd.conf
已經存在,那麼不會對它做任何改變, 而新版本
conf/httpd.conf
的内容将會被寫入檔案
conf/httpd.conf.default
。 安裝完成以後你應該檢查
.default
檔案中的内容看看有沒有不同, 如果必要,更新你原有的配置檔案。
而且,如果你已經有一個名為
htdocs/index.html
的檔案,它不會被覆寫掉 (也不會安裝
index.html.default
檔案)。 這意味着你在一個舊版本Apache上安裝新版本是安全的 (但是你必須在安裝之前首先停掉原有伺服器然後在安裝完成後重新啟動它)。
安裝Apache以後,你應該編輯
conf
目錄下的配置檔案。這些檔案已在安裝期間被配置好以便Apache能夠從安裝目錄運作,文檔目錄被配置為安裝目錄下的子目錄
htdocs
。在你開始真正使用之前還有很多選項需要設定。但是為了盡快開始,可以使用安裝時自動配置的配置檔案。
配置 Apache for Windows
與Unix系統下的版本一樣,Apache使用
conf
目錄下的檔案進行配置,但是Windows版本有幾個不同的指令,參見指令索引察看全部可用指令。
Apache for Windows主要的不同點是:
-
因為Apache for Windows是多線程的,它并不像Unix版本那樣為每個請求使用一個單獨的程序。 而是通常運作兩個Apache程序:一個父程序,和一個處理請求的子程序。在子程序内部由多個單獨的線程來處理每個請求。
是以與程序管理相關的指令是不同的:
就像Unix版本中的指令一樣,這條指令控制一個程序退出前将為多少個請求提供服務。 然而,與Unix不同的是,一個程序将為所有請求而不是隻為一個請求服務,是以如果設定這條指令,建議将它設為一個很大的值。預設設定MaxRequestsPerChild
MaxRequestsPerChild 0
使得程序從不退出。
警告: 啟動新的子程序時将會重新讀入伺服器配置檔案。如果你修改了
,新的子程序将有可能不能啟動或者可能得到預期之外的結果。httpd.conf
是一條新的指令,用來告訴伺服器應該使用多少個線程,指明了伺服器可以立刻處理的最大連接配接數;如果你的站點有大量的點選,請确認你設定了足夠大的值。推薦的預設設定是ThreadsPerChild
。ThreadsPerChild 50
- 接收檔案名作為參數的指令必須使用Windows檔案名而不是Unix檔案名。 但是,因為Apache内部使用Unix風格的名字,你必須使用正斜杠而不是反斜杠。可以使用盤符;如果省略盤符,将假定使用Apache可執行檔案所在盤符。
- Apache for Windows具有運作時裝入子產品的能力,不需要重新編譯。如果Apach在正常情況下編譯,它會在
目錄下安裝許多可選子產品。 要激活它們或其他子產品,必須使用新的/Apache2.2/modules
指令。 舉例來說,要激活狀态子產品,使用下列指令(除了LoadModule
中的狀态激活指令以外):access.conf
也可使用建立可加載子產品中的資訊。LoadModule status_module modules/mod_status.so
- Apache也可以加載ISAPI(Internet Server Applications Programming Interface)擴充,例如被Microsoft IIS伺服器和其他一些Windows伺服器所使用的。這裡有更多相關資訊。注意Apache不能加載ISAPI 過濾器。
- 當運作CGI腳本時,Apache查找腳本解釋器是由
指令配置的。ScriptInterpreterSource
- 由于在Windows下管理具有像
這樣名字的檔案是很困難的,你會發現在配置檔案中使用.htaccess
指令改變它的檔案名是很有用的。AccessFilename
- 在Windows NT上,Apache啟動時發生的錯誤将會記入Windows事件日志(event log)。這個機制将在Apache尚不能使用
error.log
檔案的時候運作。你可以通過"事件檢視器"的MMC接口檢視Windows事件日志。
注意,在Windows 9x上不存在事件日志機制,是以無法記錄啟動錯誤。
以服務方式運作Apache for Windows
Apache僅能夠在Windows NT上作為服務運作。
你可以選擇在安裝Apache時自動将其安裝為一個服務。如果你選擇"for all users",那麼Apache将會被安裝為服務。如果你選擇了"only for the Current User",你可以在安裝後手動将Apache注冊為服務。注意,你必須是Administrators組的成員才能成功注冊服務。
使用Apache Service Monitor工具,可以檢視和管理你所在網絡上的所有機器上安裝的Apache服務的狀态。為了能夠使用這個工具管理Apache服務,你必須首先自動或手動安裝Apache服務。
你可以在Apache安裝目錄的
bin
子目錄下,使用如下指令将Apache安裝為Windows NT服務:
httpd -k install
如果你想指定服務的名稱,可以使用下面的指令。當你在同一機器上安裝多個Apache服務時,你必須為它們指定不同的名字。
httpd -k install -n "服務名"
如果你想為不同名稱的服務使用不同的配置檔案,則安裝時需要指定配置檔案:
httpd -k install -n "服務名" -f "c:/files/my.conf"
如果你使用的是第一個指令,也就是除
-k install
外沒有其它指令行參數,那麼被安裝的服務名稱将是:
Apache2.2
,配置檔案将使用
conf/httpd.conf
。
要移除一個Apache服務很簡單:
httpd -k uninstall
或者使用下述指令移除特定名稱的Apache服務:
httpd -k uninstall -n "服務名"
通常,啟動、重新開機、關閉Apache服務的方法是使用Apache Service Monitor工具,另外也可以使用控制台指令:
NET START Apache2.2
和
NET STOP Apache2.2
或者通過Windows服務控制台。在啟動Apache服務之前,你應當使用下面的指令檢查一下配置檔案的正确性:
httpd -n "服務名" -t
你可以通過指令行開關來控制Apache服務。要啟動一個已經安裝的Apache服務,可以使用:
httpd -k start
要停止一個已經安裝的Apache服務,可以使用:
httpd -k stop
或
httpd -k shutdown
要重新開機一個運作中的Apache服務,強制它重新讀取配置檔案,可以使用:
httpd -k restart
預設情況下,Apache服務将被注冊為以本地系統使用者(
LocalSystem
帳号)身份運作。
LocalSystem
帳号沒有網絡權限,不能通過任何Windows安全機制通路網絡,包括檔案系統、命名管道、DCOM或secure RPC ,但是它對于本地資源卻擁有廣泛的特權。
永遠不要把網絡權限授予
LocalSystem
帳号!如果你需要Apache能夠通路網絡資源,最好按照下述方法為Apache另外建立一個單獨的帳号。
你應該建立一個單獨的帳号來運作Apache服務。特别是在必須通過Apache通路網絡資源的時候,我們更加強烈建議你這樣做。
- 建立一個普通域使用者帳号,并牢記對應的密碼。
- 授予這個建立的帳号
和作為服務登陸
權限。在Windows 2000/XP/2003上你可以使用"組政策"或通過"本地安全政策"的MMC接口來完成這個操作。作為作業系統一部分運作
- 确認建立的帳号是Users組的一個成員。
- 确認建立的帳号具有讀取和執行(RX)所有文檔和腳本目錄(例如:
和htdocs
)的權限。cgi-bin
- 确認建立的帳号對Apache的
目錄具有讀/寫/删除(RWD)的權限。logs
- 确認建立的帳号對
二進制檔案具有讀取和執行(RX)的權限。httpd.exe
一個很好的實踐經驗是賦予運作Apache服務的使用者讀取和執行(RX)整個Apache2.2目錄的權限,并且對
logs
子目錄具有讀/寫/删除(RWD)的權限。
如果你允許使用這個帳号作為一個使用者和服務登入,你就可以用這個帳号登入上去測試執行腳本、讀取web頁的權限,還可以通過控制台視窗啟動Apache 。如果這樣工作正常,你又執行了上述的操作,那麼Apache就能夠正常地作為服務運作了。
錯誤代碼2186是一個很好的提示,說明你需要檢查"登陸為"選項,因為伺服器不能通路必要的網絡資源。
當啟動Apache服務時你可能會遇到一個來自Windows服務管理器的錯誤資訊。 例如,如果你想使用控制台中的服務小程式啟動Apache,可能會得到下面這條資訊:
Could not start the Apache2.2 service on //COMPUTER
Error 1067; The process terminated unexpectedly.
隻要啟動Apache出錯你就會得到這個錯誤資訊。為了弄清是什麼引起了錯誤, 你應該遵循作為控制台程式運作Apache中的建議。
對于讓Apache在Windows 9x下以類似Windows NT服務的方式運作有一些支援。都是高度試驗性的,即使能夠工作,Apache軟體基金會将不會證明其可靠性和未來的支援。繼續進行你自己的冒險吧!
這兩種"服務"有相當大的差別:
如果你輸入下列指令,Apache會嘗試啟動,如果成功他将在背景運作:
httpd -n "服務名" -k start
例如,通過桌面的快捷方式運作,如果服務啟動成功一個控制台視窗會快速閃過并立刻消失。如果啟動時Apache檢測到比如
httpd.conf
檔案中有不正确的設定這樣的問題,則控制台視窗會保持可見。這樣将顯示一個有助于追蹤錯誤原因的錯誤資訊。
Windows 9x不支援
NET START
或者
NET STOP
指令,是以你在指令中必須使用Apache的服務控制選項。你可能希望為每個指令設定一個快捷方式以便你能夠隻需要從開始菜單或者桌面一點就能執行所需的操作。
Apache和Windows 9x沒有提供讓Apache服務以特定的具有網絡權限的使用者身份運作的支援。實際上,Windows 9x在本地機器上根本沒有提供安全性。這就是Apache軟體基金會從不支援使用Windows 9x作為公用httpd伺服器的原因。這個便利存在的唯一目的是協助使用者開發web内容和學習Apache伺服器,或者也許在一個安全的、私有的網絡上充當intranet伺服器。
作為控制台程式運作Apache
雖然通常推薦将Apache作為服務來運作,但是在某些情況下從指令行運作反而更加容易。在Windows 9x上,從指令行運作Apache是推薦的方法,因為這些系統中缺乏可靠的服務支援。
可以使用下列指令将Apache作為控制台程式從指令行運作:
httpd
Apache将會一直保持運作,直到被Ctl+C組合鍵中斷。
你還可以在安裝後通過
開始按鈕 --> 程式 --> Apache HTTP Server 2.2.xx --> Control Apache Server
在控制台中運作Apache 。這将會打開一個控制台視窗并在其中啟動Apache 。如果你沒有将Apache安裝為服務,該視窗将一直保持打開,直到被Ctl+C組合鍵中斷,并在幾秒鐘後退出。如果你已經将Apache安裝為服務,那麼那個快捷方式将會啟動服務,如果Apache服務已經啟動了,則什麼也不做。
你可以在另外一個控制台視窗中輸入以下指令停止正在運作的Apache服務:
httpd -k shutdown
這種方法比使用Ctl+C組合鍵更好,因為它可以讓Apache完成所有目前的操作并且優雅的清理所占用的資源。
Apache可以被重新啟動,這将導緻它重新讀取配置檔案,重新開機前所有正在進行的操作都将不被打斷的完成。可以使用下面的指令重新開機Apache :
httpd -k restart
請熟悉Unix版本Apache的使用者注意,這些指令對應于Unix指令
kill -TERM pid
和
kill -USR1 pid
。指令中之是以使用
-k
選項,就是為了提醒使用者這是源自Unix下的
kill
指令。
如果Apache控制台視窗在啟動後出乎意料的立即關閉,請打開一個新的控制台視窗,切換到Apache的安裝目錄下bin子目錄中,運作
httpd
指令并讀取錯誤資訊。然後再到日志目錄中檢視
error.log
檔案以尋找可能的配置錯誤。如果你的Apache采用的是預設安裝,這些指令應當是:
c:
cd "/Program Files/Apache Software Foundation/Apache2.2/bin"
httpd
等候Apache停止,或者使用Ctl+C組合鍵,然後輸入下列内容:
cd ../logs
more < error.log
可以在指令行中為Apache指定一個配置檔案,有兩種方法可以在指令行中指定配置檔案:
-
可以指定一個絕對路徑或相對路徑的配置檔案:-f
或httpd -f "c:/my server files/anotherconfig.conf"
httpd -f files/anotherconfig.conf
-
可以指定已安裝的Apache服務所使用的配置檔案:-n
httpd -n "服務名"
在這兩種情況下,必須在配置檔案中設定正确的
ServerRoot
值。
如果你沒有使用
-f
或
-n
指定配置檔案的路徑,Apache将會使用寫死在伺服器内的路徑,比如:
conf/httpd.conf
。這個内置的路徑是相對于安裝目錄的,要想檢查這個内置的路徑,你可以通過
-V
開關調用Apache ,檢視名為
SERVER_CONFIG_FILE
的變量值:
httpd -V
Apache将會按照下列順序檢查
ServerRoot
值:
- 通過
指令行開關指定的-C
值。ServerRoot
- 通過
指令行開關指定的值。-d
- 目前工作目錄。
- 安裝二進制檔案時在系統資料庫中登記的項目。
- 編譯進二進制檔案的值,該值預設為:
,你可以使用/apache
指令檢視顯示出來的httpd -V
變量的值。HTTPD_ROOT
在安裝過程中,将會在系統資料庫中建立一個版本特定的系統資料庫鍵。這個鍵的位置取決于安裝類型。如果你選擇的是"for all users",那麼将位于
HKEY_LOCAL_MACHINE
分支下,如下所示:
HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Apache/2.2.4
如果你選擇的是"for the current user only",那麼将位于
HKEY_CURRENT_USER
分支下,其中的内容取決于目前登陸的使用者,如下所示:
HKEY_CURRENT_USER/SOFTWARE/Apache Software Foundation/Apache/2.2.4
這個鍵已經被編譯進了伺服器,使得你可以測試新版本而又不影響老版本。當然,你必須注意不要在同一個目錄中安裝兩個不同的版本。
如果你沒有使用二進制安裝,在某些情況下Apache将會抱怨系統資料庫鍵丢失。如果在這種情況下伺服器仍然可以找到正确的配置檔案,那麼就可以安全的忽略它。
這個系統資料庫鍵其實就是包含
conf
子目錄的
ServerRoot
目錄。Apache将要從中讀取
httpd.conf
檔案。如果該配置檔案中又包含了一個
ServerRoot
指令,并且指向的目錄與系統資料庫中登記的不同,Apache将以配置檔案中的指令為準。如果你複制了配置檔案或者整個Apache目錄到一個新的位置,你要千萬記得修改
httpd.conf
中的
ServerRoot
指令,使其指向正确的位置。
安裝的測試
啟動Apache運作以後(不管是控制台視窗還是作為服務), 它會在80端口上進行監聽(除非你改變了配置檔案中的
Listen
指令。 要連接配接到伺服器通路預設頁面,啟動一個浏覽器并輸入下列URL :
http://localhost/
應該出現一個歡迎頁面,并且頁面上有到Apache使用者手冊的連結。 如果什麼都沒有發生或是得到了一個錯誤,檢查
logs
子檔案夾中的
error.log
檔案。如果你的主機沒有聯網或者DNS配置有嚴重問題,你也許需要輸入這樣的URL :
http://127.0.0.1/
如果你将Apache配置為在非80端口監聽(比如:8080),你應當使用下面的URL明确指定端口:
http://127.0.0.1:8080/
一旦你的基本配置可以工作了,你應該編輯
conf
目錄下的檔案來恰當地配置Apache 。 此外,如果你改變了作為NT服務運作的Apache的配置,你應該首先嘗試從指令行啟動來保證能夠正确地啟動Apache服務。
因為Apache不能與其他TCP/IP應用程式共享同一端口,你可能需要先停止或者解除安裝或者重新配置某些特定的服務。這包括(但不限于)别的web伺服器和BlackIce那樣的防火牆。如果你隻能在禁止其他服務的情況下啟動Apache ,那麼需要重新配置Apache或者其他程式使它們不監聽同一個TCP/IP端口。
轉自:http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html