windows下安裝apache web server全過程(圖文)
安裝 Apache 2.0.59
雙擊 apache_2.0.59-win32-x86-no_ssl.msi 檔案開始安裝。安裝過程很簡單,一路Next即可。途中要求輸入伺服器的域名、伺服器名及管理員信箱,輸入相應的正確資訊。如果僅僅是安裝在本地用於測試,則可按照下圖所示輸入。
安裝成功之後開啟瀏覽器,在位址列中輸入 http://localhost/。如果你能看到 Apache 的歡迎頁面以及 Apache 的紅羽毛的圖示,則說明安裝成功。否則請參考下面的說明查詢失敗原因。
安裝後的說明
預設安裝路徑為 C:\Program Files\Apache Group\Apache2。安裝程式會建立一個名為 Apache2 的系統服務並自動啟動它,可以通過右鍵單擊我的電腦->管理->服務
另外,安裝結束後系統托盤中會多出一個 Apache 的控制圖示(如下圖),可以通過它來控制 Apache 的啟動與停止。如果你想通過系統服務來控制 Apache 的話,可以從開始選單->程式->啟動中刪除Monitor Apache Servers 項,下次啟動計算機時就不會啟動該圖示。
Apache的安裝目錄結構如下圖:
其中各個目錄的含義如下。
- bin - Apache的程式檔案和庫檔案(.dll)。
- cgi-bin - 網站的指令碼的儲存位置。
- conf - 配置檔案。
- error - 各種錯誤頁面。
- htdocs - 網站的內容。
-
icons
- include - 程式開發時使用的標頭檔案。
- lib - 程式開發時使用的靜態庫檔案。
- logs - 伺服器訪問日誌和錯誤日誌。
- manual - 使用手冊。
- modules - 擴充套件模組,其下有許多副檔名為 .so 的檔案,實質上都是Windows .dll檔案。
- proxy - 使用Apache作代理時的快取目錄。
修改預設配置
預設情況下網站內容位於 Apache2/htdocs 下,而實際應用中很少講網站內容和伺服器程式放在一起。因此我們要做的第一步就是修改網站內容的位置。
我們假設網站的靜態內容位於 D:\wwwroot\htdocs 下,而指令碼程式位於 D:\wwwroot\cgi-bin 下。那麼首先要建立這兩個目錄。
之後開啟 httpd.conf 檔案,找到這一行:
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
將其修改成:
DocumentRoot "D:/wwwroot/htdocs"
然後找到這樣的內容(各行之間可能夾雜著註釋):
<Directory "C:/Program Files/Apache Group/Apache2/htdocs"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
這一段是定義網站主目錄的許可權。我們應當修改主目錄的位置。另外,Indexes 許可權表示當某個目錄下不存在 index.html 檔案時,顯示該目錄的檔案列表。實際應用中這會造成安全漏洞,應當將其刪除。修改之後的內容如下:
<Directory "D:/wwwroot/htdocs"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
然後找到這一行:
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
將其修改為:
ScriptAlias /cgi-bin/ "D:/wwwroot/cgi-bin/"
再找到這樣的內容:
<Directory "C:/Program Files/Apache Group/Apache2/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
將其修改為:
<Directory "D:/wwwroot/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
這樣配置檔案修改完畢。在系統服務中選擇 Apache2 服務單擊“重新啟動服務”按鈕,或者在系統托盤的Apache圖示中選擇Restart,或者通過命令列輸入以下命令來重新啟動 Apache。
C:\> net stop apache2 C:\> net start apache2
如果配置檔案修改無誤,則應當正常重新啟動。之後開啟瀏覽器輸入 http://localhost/,你應當看到一條“Forbidden”的錯誤資訊。然後建立 D:\wwwroot\htdocs\index.html 檔案,內容隨意。再次用瀏覽器開啟http://localhost/,應當能看到建立的 index.html 檔案的內容。
為了以後安裝其他模組,我們應當修改系統變數 PATH 以便其他模組能夠找到 Apache 的程式庫。在控制面板->系統->高階->環境變數對話方塊中,編輯系統變數中的 Path,在其最前面新增以下內容:
C:\Program Files\Apache Group\Apache2\bin;
修改之後,繼續安裝下面的模組之前,建議重新啟動計算機以避免不必要的錯誤。
常見錯誤及修正方法
為什麼不使用最新版的 Apache 2.2.3
Apache 2.0.x 版本的 Windows 版使用 Visual C++ 6.0 編譯,而 Apache 2.2.x 版本的 Windows版使用 Visual Studio .NET 編譯。由於編譯器不同,導致使用的程式庫也不同,因此 Apache 2.0.x 和 Apache 2.2.x 不能相容。目前,許多 Apache 的功能擴充套件模組僅能工作於 Apache 2.0.x 下,包括 php、subversion 等。要想使用這些功能,就必須要安裝 Apache 2.0.x 版。
當然,這僅限於 Windows 版。其他作業系統上的 Apache 不受此限。
安裝 php 5.1.6
php的安裝相對較簡單。為了管理方便,我們將 php 與 Apache 放在一起。
首先將 php-5.1.6-Win32.zip 解壓到 C:\Program Files\Apache Group\Apache2\php5 目錄下。
php5中的 Apache2 模組為 php5apache2.dll(注意不是 php5apache.dll,那個是 Apache 1.3.x 的模組)。修改 Apache2/conf 目錄下的 httpd.conf 以載入 php5 模組。查詢 LoadModule,然後在其附近新增以下內容以載入php5模組,並設定 php.ini 的位置。
LoadModule php5_module php5/php5apache2.dll PHPIniDir php5
然後查詢AddType,在其附近新增以下內容,以增加 php 的型別。
AddType application/x-httpd-php .php
再查詢DirectoryIndex命令,將其修改為以下內容,增加目錄的預設文件 index.php。
DirectoryIndex index.html index.html.var index.htm index.php
然後進入 php5 目錄,複製 php.ini-dist 檔案為 php.ini。然後修改 php.ini,查詢 extension_dir,該變數指定了 php 功能模組的位置。將其修改為以下的內容。
extension_dir = "./php5/ext"
注意,這個路徑是從 Apache2 下開始算起,而不是從 Apache2/php5 下開始。
查詢 session.save_path,這個變數指定session的儲存位置。將其前面的分號去掉,然後修改該行為以下內容:
session.save_path = "C:\Program Files\Apache Group\Apache2\tmp"
然後在 Apache2 目錄下建立 tmp 目錄,作為session的儲存目錄。
最後重新啟動 Apache 伺服器(方法參考 Apache 安裝一節)。為測試 php 是否安裝成功,在文件目錄 D:\wwwroot\htdocs 下建立 phpinfo.php 檔案,內容如下:
<?php phpinfo(); ?>
PHP各個目錄的作用
- dev - 開發用 php 靜態庫。
- ext - php擴充套件模組。
- extras - 相關檔案。
- PEAR - 訪問php模組網站 PEAR 的必要檔案。
另外,php目錄下的部分檔案功能如下。
- php.exe - php的命令列解釋程式,也可用作 CGI 直譯器。
- php5apache2.dll - Apache 2.0的PHP模組。
- php5apache.dll - Apache 1.3的PHP模組。
- php5isapi.dll - Microsoft IIS的PHP模組。
- php5nsapi.dll - Netscape Server的PHP模組。
- php5ts.dll - PHP及其擴充套件模所需的庫檔案。
新增 mysql 支援
php4之前的版本自帶mysql,而在php5中,mysql不再預設支援。為了使php5支援mysql,我們需要稍稍修改一下設定。
開啟 php5/php.ini 檔案,查詢下面這一行,並將其前面的註釋符號分號 ; 去掉。
extension=php_mysql.dll
但是這樣還不能使用mysql功能,因為 php_mysql.dll 需要 php5 目錄下的 php5ts.dll 和 libmysql.dll (可以使用 Dependency Walker 開啟 php_mysql.dll 檢視),但是這兩個 DLL 檔案既不與 php_mysql.dll 位於同一目錄下,也沒有和可執行檔案Apache.exe 位於同一目錄下,因此 php_mysql.dll 找不到這兩個DLL,不能啟動。解決方法就是將 php5ts.dll 和 libmysql.dll 複製到 Apache2/bin 下,然後重新啟動 Apache2。
使用瀏覽器開啟前面的 phpinfo.php 頁面,可以看到頁面輸出的中部有 mysql 模組的配置,說明 mysql 模組已經正常安裝。
安裝 ActivePerl 5.8.8
ActivePerl是Perl的一個Win32移植版。安裝方法很簡單,執行 ActivePerl-5.8.8.817-MSWin32-x86-257965.msi ,即出現安裝介面,一路 Next 即可。預設情況下安裝到 C:\Perl 下。注意在選擇功能時務必選擇 PPM 3.0,該程式能夠很方便地安裝各種Perl模組。
下一步需要在系統環境變數中增加 Perl 所在的位置。如果你在安裝Perl時選擇了 Add Perl to the PATH enviroment variable,則可以省略這一步。否則開啟控制面板->系統->高階->環境變數,修改系統變數中的 Path,在其最前面增加以下內容:
C:\Perl\bin;
修改環境變數後,在安裝 mod_perl 之前,最好能重新啟動計算機。
安裝 mod_perl 2.0.2
mod_perl是Apache的Perl擴充套件模組。它模擬了一個Perl的CGI執行環境,以便在Apache中執行Perl指令碼。但是mod_perl要比真正的Perl CGI的效能高上百倍。
Apache 2.0.x 系列對應的 mod_perl 第二版,mod_perl目前最新版本是 2.0.2。可以使用Perl包管理工具 ppm 進行安裝。
首先啟動命令列提示符(開始->執行->輸入cmd,OK),然後輸入 ppm,即可啟動 ppm。如果啟動失敗,看看是否在安裝 ActivePerl 的時候忘記新增 Path 環境變量了。下面以 ppm> 開頭的行為輸入的命令,其他行為輸出結果。 # 符號後面為註釋。
# 新增repository。repository為存放Perl模組的網站。 ppm> repos add "uwinnipeg Perl 5.8 repository" http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58 Repositories: [1] ActiveState Package Repository [2] uwinnipeg Perl 5.8 repository # 搜尋 mod_perl 模組 ppm> search mod_perl Searching in Active Repositories 1. Apache-mod_perl_guide [1.31] Apache-mod_perl_guide 2. mod_perl [2.0.2] Embed a Perl interpreter in the Apache/2.0 HTTP server 3. mod_perl-1 [1.29_01-dev] Embed a Perl interpreter in the Apache/1.3.27 HTTP server 4. mod_perl-2.2 [2.0.3-dev] Embed a Perl interpreter in the Apache/2.2 HTTP server 5. mod_perl-eapi-1 [1.29_01-dev] Embed a Perl interpreter in the Apache/1.3.27 HTTP server (with EAPI support) # 搜尋結果中第2項為我們要安裝的 mod_perl 2.0.2,使用install命令進行安裝 ppm> install 2 Package 2: ==================== Install 'mod_perl' version 2.0.2 in ActivePerl 5.8.8.817. ==================== Downloaded 948125 bytes. ...... # 安裝途中會詢問 Apache 的模組安裝位置,輸入 C:\Program Files\Apache Group\Apache2\modules Fetching http://theoryx5.uwinnipeg.ca/ppms/x86/mod_perl.so ... done! Where should mod_perl.so be placed? [D:/Apache2/modules] C:\Program Files\Apache Group\Apache2\modules # 輸入路徑 ...... Successfully installed mod_perl version 2.0.2 in ActivePerl 5.8.8.817.
# 退出 ppm ppm> exit
安裝完畢之後,我們可以在 Apache2/modules 目錄下發現剛剛安裝的 mod_perl.so 檔案。下面我們要將此檔案載入到 Apache 中。
開啟 Apache2/conf 目錄下的 httpd.conf檔案,查詢 LoadModule,在其附近新增以下內容:
#LoadFile "C:/Perl/bin/perl58.dll" # 如果你沒有在環境變數path中新增 C:\Perl\bin 則需要這一行 LoadModule perl_module modules/mod_perl.so # 新增mod_perl配置內容,並利用其處理 cgi-bin 下的指令碼檔案 <Directory "D:/wwwroot/cgi-bin"> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI AllowOverride None Order allow,deny Allow from all </Directory>
修改完成之後重新啟動 Apache,mod_perl 即安裝成功。你可以在系統服務中看到 Apache2 服務的描述中多了 mod_perl/2.0.2 Perl/v5.8.8 的字樣。
測試CGI指令碼的執行
上面我們已經設定 cgi-bin 目錄下的所有程式都使用 mod_perl 進行處理。這裡我們執行一個指令碼以確認其是否正常。
在 D:/wwwroot/cgi-bin 目錄下建立 hello.cgi 檔案,內容如下。 (實際上,該檔案可以是任意副檔名,我們在Apache配置中用 Directory 指令指定 cgi-bin 目錄,因此 cgi-bin 下所有的檔案都將被 mod_perl 處理。)
# hello.cgi print "Contennt-Type: text/html\n\n"; print "Hello, world! This is a CGI.";
Hello, world! This is a CGI.
如果顯示 Internal Server Error,可參考 logs/httpd-error.log 檔案中的錯誤資訊。
測試 mod_perl Apache Handler 的執行
mod_perl 的另一種執行方法就是編寫 Apache Handler。Apache Handler 是一個Perl模組,在 Apache 啟動時讀入並常駐記憶體,用來處理Web請求。
在 D:/wwwroot 下建立 lib 目錄,用於儲存 Perl 模組。我們將建立 HelloWorld::Hello 模組,內容為顯示 “Hello, world”。為建立這個模組,我們需要進行以下的工作。
- 建立模組本身
- 將模組的位置放到 @INC 變數中以便 mod_perl 能找到我們建立的模組
- 修改 httpd.conf,設定使用該模組的位置
在 lib 下建立 HelloWorld 目錄,並在 HelloWorld 目錄下建立 Hello.pm 檔案,其內容如下。
package HelloWorld::Hello; use strict; use warnings; use Apache2::RequestRec (); use Apache2::RequestIO (); use Apache2::Const -compile => qw(OK); sub handler { my $r = shift; $r->content_type('text/plain'); print "Hello, world! This is an Apache Handler.\n"; return Apache2::Const::OK; } 1;
書寫Perl模組時注意不要忘記最後的 1; ,如果沒有的話 mod_perl 會出錯。(該檔案的完整路徑為 D:\wwwroot\lib\HelloWorld\Hello.pm,不要弄錯了。)
然後我們需要將 HelloWorld::Hello 模組的位置告訴 mod_perl。在 D:\wwwroot\lib 下建立 startup.pl 檔案,內容如下:
use lib qw(D:/wwwroot/lib); 1;
然後修改 httpd.conf,加入下面的設定。
PerlRequire "D:/wwwroot/lib/startup.pl"
現在這個模組已經可以使用了。我們只需告訴 Apache 在什麼情況下使用該模組。修改 httpd.conf,加入下面的設定。
<Location /hello> SetHandler perl-script PerlResponseHandler HelloWorld::Hello </Location>
Hello, world! This is an Apache Handler.
安裝 python 2.3.5
雙擊 Python-2.3.5.exe 進行安裝。預設的安裝目錄為 C:\Python23。
為什麼不使用 python 2.4 或 python 2.5 版本
安裝 mod_python
雙擊 mod_python-3.2.10.win32-py2.3-apache2.0.exe 進行安裝。安裝程式會檢測 Python 和 Apache 的安裝路徑,並將 mod_python.so 安裝至 Apache2/modules 目錄下。
開啟 Apache2/conf/httpd.conf,查詢 LoadModule,並在其附近新增以下內容。
LoadModule python_module modules/mod_python.so
最後重新啟動 Apache2。
安裝 subversion
subversion是一個優秀的版本控制系統,它能夠完整地記錄軟體開發過程中原始碼的變動,並可以隨時將原始碼恢復到以前的任意版本。subversion的伺服器可以單獨使用,也可以作為 Apache 的模組,通過 WebDAV 協議使用。
在 subversion 的下載頁面上,你會看到關於 Windows 版的說明,簡單來講就是 subversion 沒有 Python 2.4 binding,也就是說,使用 Python 2.4 不能對 subversion 進行程式設計,這也是我們不使用 Python 2.4 的一個原因。
將 svn-win32-1.3.2.zip 解壓到 C:\svn 下。由於 svn 的 Apache2 模組需要 C:\svn\bin 下的 intl3_svn.dll 和 libdb43.dll 檔案,所以要在環境變數 Path 中增加下面的內容,並重新啟動計算機。
C:\svn\bin;
將 C:\svn\bin 下的 mod_dav_svn.so 檔案複製到 Apache2/modules 目錄下。
開啟 Apache2/conf/httpd.conf 檔案,然後查詢下面這一行,去掉其前面的註釋符號 # 。
LoadModule dav_module modules/mod_dav.so
查詢 LoadModule,並在其附近新增以下內容。
LoadModule dav_svn_module modules/mod_dav_svn.so
最後重新啟動 Apache2。