Apache HTTP Server 版本2.2
此文檔闡述了如何在Microsoft Windows平臺上安裝、配置和運行Apache 2.0 。 如果你發(fā)現(xiàn)了bug,或者希望以其他方式作出貢獻,請使用我們的bug報告頁面。
本文檔的大多數(shù)內容假定你是從一個二進制發(fā)布版安裝Apache到Windows上。 如果你想自己編譯Apache(可能有助于開發(fā)和跟蹤bugs),參看編譯Windows下的Apache。
基于當前的Windows版本狀況,本文檔使用到的縮寫及其意義解釋包括:
Apache 2.0被設計為在Windows NT上運行。它的二進制安裝程序只能在x86處理器上運行,比如Intel和AMD的芯片。Apache可能也能夠運行在Windows 9x上,但是并沒有經過測試, 也不建議在實際工作的系統(tǒng)上這樣使用。
任何情況下都必須確保TCP/IP網絡協(xié)議已經安裝。如果在Windows 95上運行,必須安裝"Winsock2"升級補丁。 "Winsock2" for Windows 95可以在這里下載。
如果在NT 4.0上運行,建議安裝Service Pack 6 ,因為Service Pack 4有眾所周知的TCP/IP和Winsock完整性的問題,在以后的Service Pack中解決了這些問題。
關于Apache最新版本的有關信息可以在http://httpd.apache.org/download.cgi上找到。那里會列出當前發(fā)行版本、 所有最近的alpha和beta測試版本以及鏡像web站點和匿名ftp服務器的信息。
你應該下載帶有.msi
擴展名的Apache for Windows版本。 這是一個單一的Microsoft Installer文件,包含了Apache ,可以立即安裝并運行。 還有一個單獨的.zip
文件只打包了源碼, 可以用Microsoft Visual C++ (Visual Studio)工具來編譯。
Apache的安裝需要有Microsoft Installer 1.2或更高版本。 在Windows 9x中,你可以從這里升級Microsoft Installer到2.0 ,在Windows NT 4.0和2000中,2.0的升級版在這里。Windows XP/2003不需要這個升級。
注意,使用這個安裝包不能在同一個機器上安裝兩套Apache 2.0。 但是,在同一個機器上,安裝一個1.3系列和一個2.0系列的Apache則沒有問題。 如果你需要在同一個機器上安裝兩套不同的2.0版本, 則必須用代碼編譯和安裝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端口監(jiān)聽,并被安裝為服務(即使無人登陸,Apache仍將運行),就選擇"for All Users, on Port 80, as a Service - Recommended
";如果你希望將Apache安裝為個人試驗使用,或者已經有一個運行于80端口的WWW服務器,就選擇"only for the Current User, on Port 8080, when started Manually
"。
The installation type 選擇Typical
會安裝除開發(fā)模塊需要使用的源碼和庫以外的所有內容。選擇Custom
可以自定義安裝哪些項目。完整安裝大約需要13MB磁盤空間,這其中并不包含你的網站文件所用空間。
Where to install 安裝Apache的文件夾,默認為C:\Program Files\Apache Group
文件夾下的Apache2
子文件夾。
安裝期間,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
。在你開始真正使用之前還有很多選項需要設置。但是為了盡快開始,可以使用安裝時自動配置的配置文件。
與Unix系統(tǒng)下的版本一樣,Apache使用conf
目錄下的文件進行配置,但是Windows版本有幾個不同的指令,參見指令索引察看全部可用指令。
Apache for Windows主要的不同點是:
因為Apache for Windows是多線程的,它并不像Unix版本那樣為每個請求使用一個單獨的進程。 而是通常運行兩個Apache進程:一個父進程,和一個處理請求的子進程。在子進程內部由多個單獨的線程來處理每個請求。
因此與進程管理相關的指令是不同的:
MaxRequestsPerChild
就像Unix版本中的指令一樣,這條指令控制一個進程退出前將為多少個請求提供服務。 然而,與Unix不同的是,一個進程將為所有請求而不是只為一個請求服務,因此如果設置這條指令,建議將它設為一個很大的值。默認設置 MaxRequestsPerChild 0
使得進程從不退出。
httpd.conf
,新的子進程將有可能不能啟動或者可能得到預期之外的結果。ThreadsPerChild
是一條新的指令,用來告訴服務器應該使用多少個線程,指明了服務器可以立刻處理的最大連接數(shù);如果你的站點有大量的點擊,請確認你設置了足夠大的值。推薦的默認設置是 ThreadsPerChild 50
。
接收文件名作為參數(shù)的指令必須使用Windows文件名而不是Unix文件名。 但是,因為Apache內部使用Unix風格的名字,你必須使用正斜杠而不是反斜杠?梢允褂帽P符;如果省略盤符,將假定使用Apache可執(zhí)行文件所在盤符。
Apache for Windows具有運行時裝入模塊的能力,不需要重新編譯。如果Apach在正常情況下編譯,它會在\Apache2\modules
目錄下安裝許多可選模塊。 要激活它們或其他模塊,必須使用新的LoadModule
指令。 舉例來說,要激活狀態(tài)模塊,使用下列指令(除了access.conf
中的狀態(tài)激活指令以外):
LoadModule status_module modules/mod_status.so
也可使用創(chuàng)建可加載模塊中的信息。
Apache也可以加載ISAPI(Internet Server Applications Programming Interface)擴展,例如被Microsoft IIS服務器和其他一些Windows服務器所使用的。這里有更多相關信息。注意Apache不能加載ISAPI 過濾器。
當運行CGI腳本時,Apache查找腳本解釋器是由ScriptInterpreterSource
指令配置的。
由于在Windows下管理具有像.htaccess
這樣名字的文件是很困難的,你會發(fā)現(xiàn)在配置文件中使用AccessFilename
指令改變它的文件名是很有用的。
在Windows NT上,Apache啟動時發(fā)生的錯誤將會記入Windows事件日志(event log)。這個機制將在Apache尚不能使用error.log
文件的時候運作。你可以通過"事件查看器"的MMC接口查看Windows事件日志。
Apache僅能夠在Windows NT上作為服務運行。
你可以選擇在安裝Apache時自動將其安裝為一個服務。如果你選擇"for all users",那么Apache將會被安裝為服務。如果你選擇了"only for the Current User",你可以在安裝后手動將Apache注冊為服務。注意,你必須是Administrators組的成員才能成功注冊服務。
使用Apache Service Monitor工具,可以查看和管理你所在網絡上的所有機器上安裝的Apache服務的狀態(tài)。為了能夠使用這個工具管理Apache服務,你必須首先自動或手動安裝Apache服務。
你可以在Apache安裝目錄的bin
子目錄下,使用如下命令將Apache安裝為Windows NT服務:
apache -k install
如果你想指定服務的名稱,可以使用下面的命令。當你在同一機器上安裝多個Apache服務時,你必須為它們指定不同的名字。
apache -k install -n "服務名"
如果你想為不同名稱的服務使用不同的配置文件,則安裝時需要指定配置文件:
apache -k install -n "服務名" -f "c:\files\my.conf"
如果你使用的是第一個命令,也就是除 -k install
外沒有其它命令行參數(shù),那么被安裝的服務名稱將是:Apache2
,配置文件將使用conf\httpd.conf
。
要移除一個Apache服務很簡單:
apache -k uninstall
或者使用下述命令移除特定名稱的Apache服務:
apache -k uninstall -n "服務名"
通常,啟動、重啟、關閉Apache服務的方法是使用Apache Service Monitor工具,另外也可以使用控制臺命令:NET START Apache2
和 NET STOP Apache2
或者通過Windows服務控制面板。在啟動Apache服務之前,你應當使用下面的命令檢查一下配置文件的正確性:
apache -n "服務名" -t
你可以通過命令行開關來控制Apache服務。要啟動一個已經安裝的Apache服務,可以使用:
apache -k start
要停止一個已經安裝的Apache服務,可以使用:
apache -k stop
或
apache -k shutdown
要重啟一個運行中的Apache服務,強制它重新讀取配置文件,可以使用:
apache -k restart
默認情況下,Apache服務將被注冊為以本地系統(tǒng)用戶(LocalSystem
帳號)身份運行。LocalSystem
帳號沒有網絡權限,不能通過任何Windows安全機制訪問網絡,包括文件系統(tǒng)、命名管道、DCOM或secure RPC ,但是它對于本地資源卻擁有廣泛的特權。
LocalSystem
帳號!如果你需要Apache能夠訪問網絡資源,最好按照下述方法為Apache另外建立一個單獨的帳號。你應該建立一個單獨的帳號來運行Apache服務。特別是在必須通過Apache訪問網絡資源的時候,我們更加強烈建議你這樣做。
作為服務登陸
和作為操作系統(tǒng)一部分運行
權限。在Windows 2000/XP/2003上你可以使用"組策略"或通過"本地安全策略"的MMC接口來完成這個操作。htdocs
和cgi-bin
)的權限。logs
目錄具有讀/寫/刪除(RWD)的權限。Apache.exe
二進制文件具有讀取和執(zhí)行(RX)的權限。logs
子目錄具有讀/寫/刪除(RWD)的權限。如果你允許使用這個帳號作為一個用戶和服務登錄,你就可以用這個帳號登錄上去測試執(zhí)行腳本、讀取web頁的權限,還可以通過控制臺窗口啟動Apache 。如果這樣工作正常,你又執(zhí)行了上述的操作,那么Apache就能夠正常地作為服務運行了。
當啟動Apache服務時你可能會遇到一個來自Windows服務管理器的錯誤信息。 例如,如果你想使用控制面板中的服務小程序啟動Apache,可能會得到下面這條信息:
Could not start the Apache2 service on \\COMPUTER
Error 1067; The process terminated unexpectedly.
只要啟動Apache出錯你就會得到這個錯誤信息。為了弄清是什么引起了錯誤, 你應該遵循作為控制臺程序運行Apache中的建議。
對于讓Apache在Windows 9x下以類似Windows NT服務的方式運行有一些支持。都是高度試驗性的,即使能夠工作,Apache軟件基金會將不會證實其可靠性和未來的支持。繼續(xù)進行你自己的冒險吧!
這兩種"服務"有相當大的區(qū)別:
如果你輸入下列命令,Apache會嘗試啟動,如果成功他將在后臺運行:
Apache -n "服務名" -k start
例如,通過桌面的快捷方式運行,如果服務啟動成功一個控制臺窗口會快速閃過并立刻消失。如果啟動時Apache檢測到比如httpd.conf
文件中有不正確的設置這樣的問題,則控制臺窗口會保持可見。這樣將顯示一個有助于追蹤錯誤原因的錯誤信息。
Windows 9x不支持NET START
或者NET STOP
命令,因此你在命令中必須使用Apache的服務控制選項。你可能希望為每個命令設置一個快捷方式以便你能夠只需要從開始菜單或者桌面一點就能執(zhí)行所需的操作。
Apache和Windows 9x沒有提供讓Apache服務以特定的具有網絡權限的用戶身份運行的支持。實際上,Windows 9x在本地機器上根本沒有提供安全性。這就是Apache軟件基金會從不支持使用Windows 9x作為公用httpd服務器的原因。這個便利存在的唯一目的是協(xié)助用戶開發(fā)web內容和學習Apache服務器,或者也許在一個安全的、私有的網絡上充當intranet服務器。
雖然通常推薦將Apache作為服務來運行,但是在某些情況下從命令行運行反而更加容易。在Windows 9x上,從命令行運行Apache是推薦的方法,因為這些系統(tǒng)中缺乏可靠的服務支持。
可以使用下列命令將Apache作為控制臺程序從命令行運行:
apache
Apache將會一直保持運行,直到被Ctl+C組合鍵中斷。
你還可以在安裝后通過 開始按鈕 --> 程序 --> Apache HTTP Server 2.2.xx --> Control Apache Server
在控制臺中運行Apache 。這將會打開一個控制臺窗口并在其中啟動Apache 。如果你沒有將Apache安裝為服務,該窗口將一直保持打開,直到被Ctl+C組合鍵中斷,并在幾秒鐘后退出。如果你已經將Apache安裝為服務,那么那個快捷方式將會啟動服務,如果Apache服務已經啟動了,則什么也不做。
你可以在另外一個控制臺窗口中輸入以下命令停止正在運行的Apache服務:
apache -k shutdown
這種方法比使用Ctl+C組合鍵更好,因為它可以讓Apache完成所有當前的操作并且優(yōu)雅的清理所占用的資源。
Apache可以被從新啟動,這將導致它重新讀取配置文件,重啟前所有正在進行的操作都將不被打斷的完成?梢允褂孟旅娴拿钪貑pache :
apache -k restart
kill -TERM pid
和 kill -USR1 pid
。命令中之所以使用 -k
選項,就是為了提醒用戶這是源自Unix下的kill
命令。如果Apache控制臺窗口在啟動后出乎意料的立即關閉,請打開一個新的控制臺窗口,切換到Apache的安裝目錄下bin子目錄中,運行apache
命令并讀取錯誤信息。然后再到日志目錄中查看error.log
文件以尋找可能的配置錯誤。如果你的Apache采用的是默認安裝,這些命令應當是:
c:
cd "\Program Files\Apache Group\Apache2\bin"
apache
等候Apache停止,或者使用Ctl+C組合鍵,然后輸入下列內容:
cd ..\logs
more < error.log
可以在命令行中為Apache指定一個配置文件,有兩種方法可以在命令行中指定配置文件:
-f
可以指定一個絕對路徑或相對路徑的配置文件:
apache -f "c:\my server files\anotherconfig.conf"
或
apache -f files\anotherconfig.conf
-n
可以指定已安裝的Apache服務所使用的配置文件:
apache -n "服務名"
在這兩種情況下,必須在配置文件中設置正確的ServerRoot
值。
如果你沒有使用 -f
或 -n
指定配置文件的路徑,Apache將會使用硬編碼在服務器內的路徑,比如:conf\httpd.conf
。這個內置的路徑是相對于安裝目錄的,要想檢查這個內置的路徑,你可以通過 -V
開關調用Apache ,查看名為SERVER_CONFIG_FILE
的變量值:
apache -V
Apache將會按照下列順序檢查ServerRoot
值:
-C
命令行開關指定的ServerRoot
值。-d
命令行開關指定的值。/apache
,你可以使用 apache -V
命令查看顯示出來的HTTPD_ROOT
變量的值。在安裝過程中,將會在注冊表中新建一個版本特定的注冊表鍵。這個鍵的位置取決于安裝類型。如果你選擇的是"for all users",那么將位于HKEY_LOCAL_MACHINE
分支下,如下所示:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
如果你選擇的是"for the current user only",那么將位于HKEY_CURRENT_USER
分支下,其中的內容取決于當前登陸的用戶,如下所示:
HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
這個鍵已經被編譯進了服務器,使得你可以測試新版本而又不影響老版本。當然,你必須注意不要在同一個目錄中安裝兩個不同的版本。
如果你沒有使用二進制安裝,在某些情況下Apache將會抱怨注冊表鍵丟失。如果在這種情況下服務器仍然可以找到正確的配置文件,那么就可以安全的忽略它。
這個注冊表鍵其實就是包含conf
子目錄的ServerRoot
目錄。Apache將要從中讀取httpd.conf
文件。如果該配置文件中又包含了一個ServerRoot
指令,并且指向的目錄與注冊表中登記的不同,Apache將以配置文件中的指令為準。如果你復制了配置文件或者整個Apache目錄到一個新的位置,你要千萬記得修改httpd.conf
中的ServerRoot
指令,使其指向正確的位置。
啟動Apache運行以后(不管是控制臺窗口還是作為服務), 它會在80端口上進行監(jiān)聽(除非你改變了配置文件中的Listen
指令。 要連接到服務器訪問默認頁面,啟動一個瀏覽器并輸入下列URL :
http://localhost/
應該出現(xiàn)一個歡迎頁面,并且頁面上有到Apache用戶手冊的鏈接。 如果什么都沒有發(fā)生或是得到了一個錯誤,檢查logs
子文件夾中的 error.log
文件。如果你的主機沒有聯(lián)網或者DNS配置有嚴重問題,你也許需要輸入這樣的URL :
http://127.0.0.1/
如果你將Apache配置為在非80端口監(jiān)聽(比如:8080),你應當使用下面的URL明確指定端口:
http://127.0.0.1:8080/
一旦你的基本配置可以工作了,你應該編輯conf
目錄下的文件來恰當?shù)嘏渲肁pache 。 此外,如果你改變了作為NT服務運行的Apache的配置,你應該首先嘗試從命令行啟動來保證能夠正確地啟動Apache服務。
因為Apache不能與其他TCP/IP應用程序共享同一端口,你可能需要先停止或者卸載或者重新配置某些特定的服務。這包括(但不限于)別的web服務器和BlackIce那樣的防火墻。如果你只能在禁止其他服務的情況下啟動Apache ,那么需要重新配置Apache或者其他程序使它們不監(jiān)聽同一個TCP/IP端口。