windows下安装apache web server全过程(图文)

来源:互联网 发布:艺术签名php源码 编辑:程序博客网 时间:2024/05/19 01:30

安装 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。