Owen的酒楼

--酒楼上渡过的人生--
生命太短,人生太长,但愿别喝醉了。

导航

Windows下Apache相关安装指南 ZT

Posted on 2008-09-18 15:41  Hicome  阅读(810)  评论(1编辑  收藏  举报

本文介绍了在Windows下安装Apache、PHP、mod_perl、mod_python、subversion的方法。


所需安装文件

另外,为了在安装失败时查找原因,最好事先准备好 Dependency Walker 这个工具。该工具可以查看程序运行所必需的 .dll 文件。如果你已经安装了 Microsoft Visual C++ 6.0,那么其中已经包含了该工具,就不必再重新下载了。

安装 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();
?>

然后打开浏览器,访问 http://localhost/phpinfo.php 。如果能看到 php 的信息页,即表明php安装成功。

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.";

保存之后在浏览器中输入 http://localhost/cgi-bin/hello.cgi ,如能得到下面的结果则说明 mod_perl 工作正常。

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>

最后重新启动 Apache。在浏览器中打开 http://localhost/hello,应当能看到下面的文字:

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。


 



这篇文章有 8 条评论了,快来一起讨论讨论吧!
#1
张勇
2007-07-19 12:14

你好!
我看了这篇文章后,按上面的要求下载和安装这些软件,
怎么在 安装 mod_perl 2.0.2
后配置httpd.conf出错呢?
安装mod_perl 2.0.2后,打开Apache2/conf 目录下的 httpd.conf文件,此时启动Apache2服务器时正常,但在查找 LoadModule,在其附近添加以下内容时,#LoadFile “C:/Perl/bin/perl58.dll” # 如果你没有在环境变量path中添加 C:\Perl\bin 则需要这一行
LoadModule perl_module modules/mod_perl.so
Apache2服务器不能启动,

为什么啊?
我的环境是:XP系统,Apache 2.0.59,ActivePerl-5.8.8.817-MSWin32-x86-257965
mod_perl版本是2.0.3(因为下不了2.0.2)

请指点下,谢谢啊!
我的QQ:103335460
电子邮箱:zhangyong_java@163.com

#2
Aqua
2007-09-15 12:16

非常棒的的一篇文章!我花了一上午时间全部调通了,呵呵~ 博主的文章确实很不错,特别是对我这种菜鸟。

ActivePerl-5.8.8.822版本中有点变化。(稍微完善一下)
PPM3目前已经升级到PPM4了,图形化的界面在设置上会有所不同,具体的设置如下:
在图形化界面PPM4中的Preferences里添加一个Repositories,
Name随便起一个,Location中输入:
http://theoryx5.uwinnipeg.ca/ppms/package.lst
然后search一下mod_perl就Okay了。

#3
charlee
2007-09-16 11:04

To Aqua:谢谢!确实,ppm已经变成GUI界面的了,原来的命令行版本的命令是 ppm-shell。

#4
jolinmx
2007-12-19 16:18

1楼的问题是在于 APACHE是2.0 而安装的mod_perl版本是2.0.3 [注意这里的2.0.3 是针对APACHE2.2]所以当然启动不了

#5
weizaiyue
2008-02-22 19:16

Apache2.0.x安装在Vista下却不能启动服务,如何解决?请指点!

#6
charlee
2008-02-22 21:58

@weizaiyue 不好意思,我没有用过vista。哪位用过vista的帮忙解答一下?

#7
wgw
2008-08-20 16:42

非常感谢你的资料解决了我的问题~*_*还有替作者补充一下在PHP.INI中加载的文件如下:
extension=php_mysql.dll
extension=php_pdo_mysql.dll
我自己把这两个加载上了(不管有用没用加上再说~_~)extension=php_pdo_mssql.dll
extension=php_mssql.dll

#8
charlee
2008-08-20 17:27

@wgw 谢谢!

php_mssql.dll 是Microsoft SQL Server的支持库,如果要用的话加上就行。

另外PDO是PHP在数据库方面的新的接口,据我的理解,PDO似乎要为所有数据库连接提供统一的接口。如果要用PDO,可以添加相应的 php_pdo_mysql.dll 和 php_pdo_mssql.dll 模块。