1. 程式人生 > >windows下安裝apache web server全過程(圖文)

windows下安裝apache web server全過程(圖文)

安裝 Apache 2.0.59

雙擊 apache_2.0.59-win32-x86-no_ssl.msi 檔案開始安裝。安裝過程很簡單,一路Next即可。途中要求輸入伺服器的域名、伺服器名及管理員信箱,輸入相應的正確資訊。如果僅僅是安裝在本地用於測試,則可按照下圖所示輸入。

apache2_install.png

安裝成功之後開啟瀏覽器,在位址列中輸入 http://localhost/。如果你能看到 Apache 的歡迎頁面以及 Apache 的紅羽毛的圖示,則說明安裝成功。否則請參考下面的說明查詢失敗原因。

安裝後的說明

預設安裝路徑為 C:\Program Files\Apache Group\Apache2。安裝程式會建立一個名為 Apache2 的系統服務並自動啟動它,可以通過右鍵單擊我的電腦->管理->服務

確認其存在,如下圖。

apache2_service.png

另外,安裝結束後系統托盤中會多出一個 Apache 的控制圖示(如下圖),可以通過它來控制 Apache 的啟動與停止。如果你想通過系統服務來控制 Apache 的話,可以從開始選單->程式->啟動中刪除Monitor Apache Servers 項,下次啟動計算機時就不會啟動該圖示。

apache2_monitor_trayicon.png

Apache的安裝目錄結構如下圖:

apache2_tree.png

其中各個目錄的含義如下。

  • bin - Apache的程式檔案和庫檔案(.dll)。
  • cgi-bin - 網站的指令碼的儲存位置。
  • conf - 配置檔案。
  • error - 各種錯誤頁面。
  • htdocs - 網站的內容。
  • icons
     - Apache生成檔案列表時使用的各種圖示。
  • 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。