APACHE系统介绍
时间:2006-06-09 来源:guozheng2003
根据著名的 WWW 服务器调查公司所作的调查,世界上百分之五十以上的 WWW 服务器都在
使用 Apache,是世界排名第一的 WEB 服务器。Apache 的诞生极富有戏剧性。当 NCSA WWW
服务器项目停顿后,那些使用 NCSA WWW 服务器的人们开始交换他们用于该服务器的补丁
程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了 Apache
Group,后来这个团体在 NCSA 的基础上创建了 Apache。
Apache 的主要特征是:
. 可以运行上所有计算机平台;
. 支持最新的 HTTP 1.1 协议;
. 简单而强有力的基于文件的配置;
. 支持通用网关接口 CGI;
. 支持虚拟主机;
. 支持 HTTP 认证;
. 集成 Perl 脚本编程语言;
. 集成的代理服务器;
. 具有可定制的服务器日志;
. 支持服务器端包含命令(SSI)
. 支持安全 Socket 层(SSL)
. 用户会话过程的跟踪能力;
. 支持 FastCGI;
. 支持 Java Servlets。
安装 Apache
下面我们就开始漫漫征服 Apache 之旅,通过循序渐进的需求实例,一步步地学习使
用 Apache,从入门到精通。
系统需求
运行 Apache 不需要太多的计算资源。它在有 6-10MB 硬盘空间和 8MB RAM Linux
系统上运行得很好。然而,只运行 Apache 可能不是你想做的事情。更可能的是,你想运
行 Apache 来提供 WWW 服务、启动 CGI 进程以及充分利用所有 WWW 能够提供的令人惊奇的 功能。在这种情况下,你需要提供反映负载要求的额外的磁盘空间和内存空间。也就是
说,如果仅仅是启动 WWW 服务并不需要太多的系统资源,但是想要能为大量的客户提供
服务就需要更多的系统资源。
获取软件
你可以在 http://www.apache.org 中获得 Apache 的...梢灾苯邮褂盟 ?/a>
需要注意的是,Apache 软件包有两种:一种是源代码,下载后需要自己重新编译;另一
种是可执行文件,下载后只需解压就可以使用。
安装软件
你可以通过以下三种方法安装 Apache 服务器。
1.如果你安装的 Linux 版本中带用 Apache 的话,就在选择所要安装的服务器的时
候,将 httpd 这个服务选上,Linux 安装程序将自动完成 Apache 的安装工作,并做好基
本的配置。
2.使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级用户,因
为它相对比较简单。
下载软件包 apache_1.2.4.e.tar.gz
tar xvzf apache_1.2.4.e.tar.gz
这就完成了安装工作,简单吧!
如果你使用的是 RedHat Linux 的话,你也可以下载 apache_1.2.4.rpm 软件安装包,
然后使用 rpm -ivh apache_1.2.4.rpm 命令安装。
3.如果你想把 Apache 服务器充分利用起来的话,就一定要自己编译 Apache 定制其
功能。
下载包含 Apache 源代码的软件包 apache_1.2.4.tar.gz;然后用 tar 命令将它解开;将
当前目录改变为 Apache 源代码发行版的 src 目录; 将配置样本文件
(Configuration.tmpl)复制为 Configuration 文件;
编辑 Configuration 文件中的配置选项:
Makefile 配置选项:一些编译选项:
. "CC="一行指定用什么编译软件编译,一般为"CC=gcc";
. 如果需要将额外的标志(参数)指定给 C 编译软件,可以使用:
EXTRA_CFLAGS=
EXTRA_LFLAGS=
. 如果系统需要特殊的库和包含文件,可以在这里指定它们:
EXTRA_LIBS=
EXTRA_INCLUDES=
. 如果你要改变代码优化设置的话,你须将下面一句去掉注释,然
后改成你所需要的值:
#OPTIM=-O2
Rule 配置选项:用来决定需要什么功能,一般情况下无需改变。
模块配置:模块是 Apache 的组成部分,它为 Apache 内核增加新功能。通过使用模块配
置,可以自定义在 Apache 服务器中需要什么功能,这个部分也是 Apache 灵活性的表现。
模块配置行如下所示:
AddModule modules/standard/mod_env.o
如果你需要 Apache 服务器具备什么功能,就将那个模块用 AddModule 语句加到配置文件
Configuration 中去。
下表列出了 Apache 的模块功能:
模块名 功能 缺省
mod_access 提供基于主机的访问控制命令 y
mod_actions 能够运行基于 MIME 类型的 CGI 脚本或 HTTP 请求方法 y
mod_alias 能执行 URL 重定向服务 y
mod_asis 使文档能在没有 HTTP 头标的情况下被发送到客户端 y
mod_auth 支持使用存储在文本文件中的用户名、口令实现认证 y
mod_auth_dbm 支持使用 DBM 文件存储基本 HTTP 认证 n
mod_auth_mysql 支持使用 MySQL 数据库实现基本 HTTP 认证 n
mod_auth_anon 允许以匿名方式访问需要认证的区域 y
mod_auth_external 支持使用第三方认证 n
mod_autoindex 当缺少索引文件时,自动生成动态目录列表 y
mod_cern_meta 提供对元信息的支持 n
mod_cgi 支持 CGI y
mod_dir 能够重定向任何对不包括尾部斜杠字符命令的请求 y
mod_env 使你能够将环境变量传递给 CGI 或 SSI 脚本 n
mod_expires 让你确定 Apache 在服务器响应请求时如何处理 Expires y
mod_headers 能够操作 HTTP 应答头标 y
mod_imap 提供图形映射支持 n
mod_include 使支持 SSI n
mod_info 对服务器配置提供了全面的描述 y
mod_log_agent 允许在单独的日志文件中存储用户代理的信息 n
mod_log_config 支持记录日志 y
mod_log_referer 提供了将请求中的 Referer 头标写入日志的功能 n
mod_mime 用来向客户端提供有关文档的元信息 y
mod_negotiation 提供了对内容协商的支持 y
mod_setenvif 使你能够创建定制环境变量 y
mod_speling 使你能够处理含有拼写错误或大小写错误的 URL 请求 n
mod_status 允许管理员通过 WEB 管理 Apache y
mod_unique_id 为每个请求提供在非常特殊的条件下保证是唯一的标识 n
在 src 目录下执行:". /configure";
编译 Apache:执行命令"make";
根据机器性能的不同,经历一段 5-30 分钟的编译,就大功告成了。
将编译好的可执行文件 httpd 复制到/etc/httpd/bin 目录下;
将 Apache 发行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf 文件
复制到/etc/httpd/conf 目录下。到此为止,安装完成。
一些说明
在 Red Hat Linux 6.0 中,Apache 将自己的所有配置文件和日志文件放在了"/etc/httpd"
目录下,其中"/etc/httpd/conf"下为配置文件,"/etc/httpd/log"下为日志文件。
同时,它将建立"/home/httpd"目录,并在其下建立三个子目录:"html/":在这个目录
下存放 HTML(主页)文件;"cgi-bin/":在这个目录下可以存放一些 CGI 程序;"icons/":
在这个目录下是服务器自带的一些图标。
配置 Apache 基础篇,让 WWW 服务器跑起来
Apache 服务器软件的配置文件主要有:"access.conf":用于设置系统中的存取方式和
环境;"httpd.conf":用于设置服务器启动的基本环境;"srm.conf":主要用于做文件
资源上的设定;"mime.type":记录 Apache 服务器所能识别的 MIME 格式。
在具体讲解之前,我们必须告诉大家,Apache 已经在安装时就采用了一系列的缺省值,
已经让 WWW 服务器跑起来了。你只需要将装上 Linux+Apache 的主机联入 Internet,然
后将主页存放到"/home/httpd"目录下即可。
下面介绍一些最主要的配置选项的含义,以便大家用最小的精力、最小的配置准备好服
务器。
httpd.conf
tpd.conf 是主配置文件。它告诉服务器将如何运行。
一、最重要的配置选项 ServerType standalone | inetd
这个配置选项指定如何运行 WEB 服务器。Apache 可以使用两种方法来运行服务器:
standalone(独立的)和 inetd(由 inetd 运行的)。standalone 参数表示 WEB 服务进程以
一个单独的守候进程的方式在后台侦听是否有客户端的请求,如果有就生成一个子进程
来为其服务。inetd 参数表示 WEB 服务不是以一个单独的守候进程的形式支持。而是由
Inetd 这个超级服务器守候进程进行代劳,当它收到一个客户端的 WEB 服务请求的时候,
再启动一个 WEB 服务进程为其服务。从功能的角度看,这两种方法几乎是相同的。但它
们之间实际有很大区别,区别在于服务器的性能。一个由 inted 运行的服务器进程在它
结束对请求服务的同时立刻退出。而在 standalone 模式下,子 WWW 服务器进程在退出之
前要挂起一段时间,这就给它们提供了机会,可以重新用来服务新的请求。
在 standalone 模式下,不存在对每个请求启动新进程的开销,所以它的效率更高;而
inetd 模式被认为比 standalone 模式更具安全性。
standalone 模式:
此种模式下,WWW 服务器侦听特定端口的连接请求。当客户机发出到特定端口地址的连
接请求时,主服务器进程启动子 WWW 服务进程来服务该请求。另外还需要告诉主服务器
进程侦听的特定端口地址,使用命令:
Port [number] (缺省值为 80)
inetd 模式
inetd 是侦听有小于 1024 的端口连接请求的 Internet 守护进程(一个服务器进程)。与
前面的方法不同,当客户系统发出到 WWW 服务器的连接请求时,inetd 启动一个 WWW 服
务器进程,由此进程服务此请求,完成服务后即退出。如果选择通过 inetd 服务器来运
行 Apache,需要编辑/etc/inetd.conf 文件为 Apache 添加一条新的记录:
httpd stream tcp nowait httpd /etc/httpd/bin/httpd -f
/etc/httpd/conf/httpd.conf
修改了/etc/inetd.conf 文件后,就需要修改/etc/services 中添加一行
httpd 80/tcp httpd
做完以上修改后,需要重新启动 inetd 进程。首先,使用以下命令取得 inetd 的进程 ID:
ps auxw |grep inetd
然后执行命令:kill -HUP <inetd 的进程 ID>
在 RedHat Linux 中,默认是采用 inetd 服务器来运行 Apache,所以只要你在安装时选
择了 httpd,以上工作在安装时就已经代你完成了。
二、其它配置选项
Server Admin 命令,用来设置 WEB 管理员的 E-Mail 地址。这个地址会出现在系统
连接出错的时候,以便访问者能够将情况及时地告知 WEB 管理员。
命令格式: Server Admin [you E-Mail address]
例:Server Admin [email protected]
ErrorLog 命令,用来指定错误记录文件名称和路径。
命令格式: ErrorLog [log filename]
例:ErrorLog /var/httpd/error.log
Timeout 命令,只要客户端超过这里设定的秒数还没有完成一个请求的话,服务端将终
止这次请求服务。如果网络速度较慢的话,建议在此设置较大的数值。以给客户端更多
机会。
命令格式: Timeout [second]
例:Timeout 120
ServerRoot 命令,它指定在何处保存服务器的配置、错误及日志文件。
命令格式: ServerRoot [fully qualified path name]
例:ServerRoot /etc/httpd
ServerName 命令,它配置服务器的 Internet 主机名
命令格式: ServerName [host name]
例:ServerName www.xxx.com
srm.conf
srm.conf 是资源配置文件,用它来告诉服务器你想在 WWW 站点上提供什么资源以及在哪
里和如何提供们。
DocumentRoot 命令,用来指定主文档的地址。
命令格式: DocumentRoot [Path]
例:DocumentRoot /home/httpd/html
UserDir 命令,用来指定个人主页的位置。如果你有一个用户 test,那么它主目录是
"/home/test",当客户端输入"http://yourdomain/~test",系统就会到对应的目录
"/home/test/UserDir/"中去寻找。其中"UserDir"就是在 UserDir 命令中设置的指定目
录。
命令格式: UserDir [Path]
例: UserDir Public_html
DirectoryIndex 命令,用来声明首页文件名称。一般地,我们使用"index.html"或
"index.htm"作为首页的文件名。如果这样设置后,那么客户端发出 WEB 服务请求时,将
首先调入的主页是在指定目录下文?quot;index.html"或"index.htm"。
命令格式: DirecotryIndex [filename]
例:DirecotryIndex index.html index.htm
ScriptAlias 命令,为脚本程序目录起个别名,具体可见 4.7 小节。
命令格式: ScriptAlias [/alias/] [fullly qualified path for script directory]
例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin
access.conf 的配置
access.conf 文件用来设置 WWW 站点上诸如文件、目录和脚本项目的访问权限。该文件
的第一段非注释部分如下:
<Directory /home/httpd/html>
Option Indexes Includes ExecCGI FollowSymLink
AllowOverride None
Order allow , deny
allow from all
</Directory>
大家应该注意到,这一个部分是以<Directory /home/httpd/html>开始,以</Directory>
结束的。这表示在其中间的部分都是针对指定目录��"/home/httpd/html"而言的。
1.Option 命令有很多的参数,各个参数的意义如下所示:
All 准许以下所有功能(MultiViews 除外);
MultiViews 准许内容协商的 Multiviews;
Indexes 若该目录下无 index 文件,则准许显示该目录下的文件以供选择;
IncludesNOEXEC 准许 SSI(Server-side Includes),但不可使用#exec 和#include 功能;
Includes 准许 SSI;
FollowSymLinks 准许符号链接到其他目录;
ExecCGI 准许该目录下可以使用 CGI。
2.而 AllowOverride 命令则是用来决定是否准许在"access.conf"文件中设定的权限是
否可以被在文件".htaccess"中设定的权限覆盖。它有两个参数:
All 准许覆盖;
None 不准许覆盖。
3.Order 命令:用来设定谁能从这个服务器取得控制。它也有两个参数:
allow 可以取得控制;
deny 禁止取得控制。
现在我们一起来看看关于目录"/home/httpd/html"的设置的含义:它使得这个目录,如
果不存在 index.htm 文件时,列出目录信息以供选择,准许 SSI,允许执行 CGI 程序,
开启了动态连接。它不允许再使用在文件".htaccess"中设定来覆盖这里所设置的权限。
使所有的人都可以取得控制。
该文件的第二段非注释部分如下:
<Directory /home/httpd/cgi-bin>
Option ExecCGI
AllowOverride None
</Directory>
这个表示目录"/home/httpd/cgi"的设置为,当前目录下可以执行 CGI 程序。不允许再使
用在文件".htaccess"中设定来覆盖这里所设置的权限。
需要说明的是,不同的 LINUX 系统中,可以在这个文件中看到的信息不完全相同,但是
根据这里给出的信息,大家可以参照命令的解释自行理解文件中的设置,以及根据自己
的需要进行相应的修改。
4.4 使新的配置生效
在上面,我们可能已经根据新的需求更改了相应的配置选项,如果我们要使得这个新的
配置立即生效。我们就必须重新启动 WEB 服务进程。在 LINUX 中,我们可以十分方便地
使用命令行来使得 WEB 服务进程重启。
/etc/rc.d/init.d/httpd restart
五、为用户开辟个人主页空间
如果我们利用了 LINUX 系统架设了一台 WEB 服务器,我们不仅可以存放公司的主页,而
且还可以为公司的每一个员工提供一块个人主页的空间。
首先,为需要个人主页空间的员工在 LINUX 上开设一个帐号。这样,它就拥有了一个用
户主目录"/home/用户帐号名"。
addusr 用户帐号名
passwd 用户帐号名
在用户主目录下建立一个目录"public_html",然后为其设置相应的权限。
cd ~用户帐号名
mkdir public_html
chmod 755 public_html
确认在 srm.conf 文件中的 UserDir 命令设置的是 public_html 目录。让员工将自己的个
人主页上传到自己用户主目录下的 public_html 目录中。
现在就可以使用"http://www.company.com/~用户帐号名"来访问员工的个人主页了。
用 Apache 实现虚拟主机服务
什么是虚拟主机服务
所谓的虚拟主机服务就是指将一台机器虚拟成多台 WEB 服务器。举个例子来说,一
家公司想从事提供主机代管服务,它为其它企业提供 WEB 服务。那么它肯定不是为每一
家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚
拟主机的形式,提供多个企业的 WEB 服务,虽然所有的 WEB 服务就是这台服务器提供的,
但是让访问者看起来却是在不同的服务器上获得 WEB 服务一样。
具体地说,就是,我们可以利用虚拟主机服务将两个不同公司 www.company1.com
与 www.company2.com?..玫降闹饕衬谌荨?/a> 用 Apache 设置虚拟主机服务通常可以采
用两种方案:基于 IP 地址的虚拟主机和基于名字的虚拟主机,下面我们分别介绍一下它
们的实现方法。以便大家在具体的应用中能够选择最合适的实现方法。
设置实现基于 IP 地址的虚拟主机服务实现前提
这种方式需要在机器上设置 IP 别名,也就是在一台机器的网卡上绑定多个 IP 地址
去为多个虚拟主机服务。而且要使用这项功能还要确定在你的 LINUX 内核中必须支持 IP
别名的设置,否则你还必须重新编译内核。
下面举一个拥有两个虚拟主机的服务设置,以供参考。
2.配置步骤
假设,我们用来实现虚拟主机服务的机器,首先已经为自己提供了 WEB 服务,现在将为
新的一家公司 www.company1.com 提供虚拟主机服务。
规划 IP 地址:为虚拟主机申请新的 IP 地址。(假设本机 IP 地址为 202.101.2.1)
www.company1.com 202.101.2.2
2) 让 ISP 作好相应的域名解析工作。
3) 为网卡设置 IP 别名:
/sbin/ifconfig eth0:0 202.101.2.2 netmask 255.255.255.0
4) 重新设置"/etc/httpd/conf/httpd.conf",在文件中加入:
<VirtualHost 202.101.2.2>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company1.com
ServerName www.company1.com
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
5)建立相应的目录。
mkdir /home/httpd/www.company1.com
mkdir /var/log/httpd/www.company1.com/error.log
6)将相应的主页内容存放在相应的目录中即可。
3.不利因素
这种虚拟主机的实现方法有一个严重的不足,那就是,每增加一个虚拟主机,就必须增
加一个 IP 地址。而由于 IP 地址空间已经十分紧张,所以通常情况下是无法取得这么多
的 IP 地址的。而且从某种意义上说,这也是一种 IP 地址浪费。设置实现基于名字的虚
拟主机服务而基于名字的虚拟主机服务,是比较适合使用的一种方案。因为它不需要更
多的 IP 地址,而且配置简单,无须什么特殊的软硬件支持。现代的浏览器大都支持这种
虚拟主机的实现方法。当然,这也就是指一些早期的客户端浏览器也许不支持这种虚拟
主机的实现方法。
正是以上原因,我们没有理由不使用基于名字的虚拟主机服务而使用基于 IP 地址的
虚拟主机服务。配置基于名字的虚拟主机服务需要修改配置文
件?quot;/etc/httpd/conf/httpd.conf",在这个配置文件中增加以下内容。
NameVirtualHost 202.101.2.1
<VirtualHost 202.101.2.1>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company1.com
ServerName www.company1.com
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
<VirtualHost 202.101.2.1>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company2.com
ServerName www.company2.com
ErrorLog /var/log/httpd/www.company2.com/error.log
</VirtualHost>
也就是在基于 IP 地址的配置基础上增加一句:NameVirtualHost 202.101.2.1 而已。
在本例中,为了体现只需要增加一次,所以特别地设置了两个虚拟主机服务。
最后也是建立相应的目录,将主页内容放到相应的目录中去就可以了。
配置 CGI
1. 什么是 CGI
CGI 是独立于语言的网关接口规范,它实际上可以用任何广泛流行的应用程序开发语言
来实现,包括 C、C++、Perl、Shell 脚本甚至 Java。
WEB 服务器从客户端得到某个 URL,它告诉 WEB 服务器,必须运行一个 CGI 外部应用程序。
那么 WEB 服务器启动这一应用程序,等待它完成并返回输出结果。最后,它将此应用程
序的输出结果传输给另一端的 WEB 客户。
2. 为 CGI 配置 Apache
那么如何使 Apache 能处理 CGI 请求呢?我们必须通过相应的配置过程告知 Apache 在哪
里存储 CGI 程序,指明 CGI 程序的扩展等,以下我们逐一介绍一下设置的内容与步骤。
创建存储 CGI 程序的目录
创建集中的 CGI 程序目录只是建立 CGI 环境的开始。如果要考虑提高安全
性的话,应将集中的 CGI 程序目录保存在 DocumnetRoot 目录外,使得访问者不能直接访
问 CGI 程序。 第一步:在 DocumentRoot 目录外创建一个目录,然后将所有的 CGI 程序
都集中存放在这个目录下。例如,你可创建一个/home/httpd/public/apps 的目录作为
CGI 程序的大本营。
第二步:为 CGI 程序目录创建别名,也就是编辑配置文件 httpd.conf,加入:
ScriptAlias /cgi-bin/ /home/httpd/public/apps
这样做后,当客户访问 www.xxx.com/cgi-bin/li.cgi 时,WEB 服...ps/li.cgi 文件。
第三步:为 CGI 目录设置合适的权限,一般是只允许 Apache 有读取和执行的权限但没有
写的权限。
允许用户访问 cgi-bin
我们已经在 4.5 小节中介绍了如何给用户开辟个人主页空间,但如果你的
用户需要使他的主页更具有活力,往往会向你申请 cgi-bin 访问服务。下面我们就介绍
一个 Apache 服务器为用户提供的两种 cgi-bin 访问方法。
1)使用 Directory 或 DirectoryMatch 容器
当在配置文件 srm.conf 中用 UserDir 命令被赋值为目录名称时,Apache 就
把它作为用户 WWW 站点的顶层目录。例如:
UserDir Public_html
当 Apache 接到 www.xxx.com/~user 的请求,就到/home/...饕撤⑺透 突 А?/a>
如果要为每个用户添加 CGI 支持就在 Apache 的配置文件 access.conf 中添加下列配置:
<DirectoryMatch "/home/[a-z]+/public_html/cgi-bin">
Options ExecCGI
AddHandler cgi-script .cgi .pl
</DirectoryMatch>
注:将 DirectoryMatch 换成 Directory 亦可
在这种方法中,Apache 服务器将 www.xxx.com/~user/cgi-bin 请求翻译成...未 姓
防┱姑?/a>(.cgi 或.pl)的 CGI 程序。
使用 ScriptAliasMatch 命令
通过使用 ScriptAliasMatch 命令,也可以为每个用户添加 CGI 支持。例如:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2
这个命令将用户名与$1 相匹配,其中$1 与~([a-z]+)相等。将/cgi-bin/后面的任何内容
与$2 相匹配,其中$2 与(.*)相等。
这个设置也就实现了将 www.xxx.com/~user/cgi-bin/xxx.cgi 请求解释为:
/home/user/Public_html/cgi-bin/xxx.cgi
那么大家想一想,如果你想将这个请求解释为:
/home/httpd/public/apps/xxx.cgi
该如何设置呢?对,应该是:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2
3. Apache 为 CGI 提供的环境变量
Apache 服务器提供了许多环境变量可以用于 CGI 程序的编写,了解它们也一定有助于写
出充分利用 Apache 的 CGI 程序,所以在此也对此作一简单介绍。
服务器变量
服务器变量由 Apache 设置用来通知 CGI 程序有关 Apache 的情况。通过使
用这些变量,CGI 程序能确定有关服务器的不同信息:Apache 的版本,管理员的 E-Mail
地址等。
SERVER_SOFTWARE
这个变量是 WWW 服务器 Apache 的版本号,它的值形如:Apache/Version,如 Apache/1.3;
GATEWAY_INTERFACE
这个变量的值是当前 CGI 规范的版本号,其值形如:CGI/1.1;
SERVER_ADMIN
如果在 httpd.conf 文件中有设置站点管理员的 e-mail 地址的话,这个变量就会存放着
这个 e-mail 地址;
DOCUMENT_ROOT
这个变量存放在是被访问的 WWW 站点的 DocumentRoot 命令指定的值。
客户请求变量
Apache 提供的有关客户请求方的环境变量有许多,以下只是有选择性地介绍一些最常见
的。
SERVER_NAME
此变量可以告诉 CGI 程序它访问的是哪一个主机。这个值可以是 IP 地址也可以是完整的
主机名;
HTTP_ACCEPT
此变量被赋值为客户所能接受的 MIME 类型的列表,如:HTTP_ACCEPT=image/gif;
HTTP_ACCEPT_CHARSET
此变量被赋值为客户所能接受的字符集,如:
HTTP_ACCEPT_CHARASET=iso-8859-1.,*,utf-8;
HTTP_ACCEPT_LANGUAGE
此变量被赋值为客户所能接受的语言,如:HTTP_ACCEPT_LANGUAGE=en;
HTTP_ACCEPT_AGENT
这个变量指定发出请求的系统正在运行的浏览器类型和操作系统;
HTTP_PORT:服务端口;
REMOTE_HOST:客户端的 IP 地址或 IP 名称信息;
REMOTE_PORT:客户端的端口号;
4. 一点提示
若干年来,通过网关接口(CGI)已成为服务器端应用程序开发的事实标准。但随着时间
的推移,发现在沉重的 CGI 负担下许多 WWW 服务器系统的表现不尽人意。这是因为 CGI
规范存在瓶颈问题:每当客户系统请求 CGI 应用程序时,WWW 服务器就必须启动新的 CGI
进程,直到完成任务后结束进程。这在负载不高时,会工作正常。但是,在高负载时,
繁多的进程将成为性能的瓶颈问题。
所以现在开始出现新的标准来弥补这一不足,其中 FastCGI 是很有前途的一种新的开放
式标准。
你可以在 Apache 中通过添加 mod_fastcgi.c 模块来支持 FastCGI。
解读 Apache 日志
当你一步步地看到这里的时候,相信你的 WWW 站点已经建好,并且已经在 Internet
上展现出来了。这时你可能就会关心谁造访过你的站点,或者想知道你的 Apache 服务器
现在的运行状态与性能如何。下面我们一起通过解读 Apache 的日志来实现这个伟大的愿
望。
一、盯着 Apache 服务器
Apache 允许通过 WWW 监视服务器的配置信息与运行状态。
1.观看配置信息
如果你的 Apache 象缺省配置一样加入了 mod_info 模块的话,你就可以通过访问
http://localhost/server-info 查看服务器信息。
2.使用状态页
如果你的 Apache 象缺省配置一样加入了 mod_status 模块的话,你就可以
通过访问 http://localhost/apache-status 查看?..畔ⅲ 渲邪 ǎ?/a>
¨ 服务器系统的当前时间;
¨ 服务器最近一次重启时间;
¨ 服务器启动后的运行时间;
¨ 到目前为止服务的访问总数;
¨ 到目前为止传输的字节总数;
¨ 服务请求的子进程数;
¨ 空闲子进程数;
¨ 每个进程状态、子进程服务的请求数以及该子进程传输的字节总数;
¨ 每秒平均请求数、每秒传输的字节数、每次请求平均传输字节数;
¨ 目前每个子进程 CPU 占用及 Apache 的总的 CPU 占用率;
¨ 当前主机及处理的请求。
二、什么是日志文件
日志文件是 Apache 工作的记录,Apache 包括了 mod_log_config 模块,它用来记录日志。
在缺省情况下,它用通用日志格式 CLF 规范来写。CLF 日志文件内对每个请求均有一个
单独行,形如:host ident anthuser date request status bytes
其含义如下:
¨ host��客户端主机的全称域名或 IP 地址;
¨ ident��存放客户端报告的识别信息;
¨ authuser��如果是基于用户名认证的话,值为用户名;
¨ date��请求的日期与时间;
¨ request��客户端的请求行;
¨ status��返回到客户端的三们数字的 HTTP 状态码;
¨ bytes��除去 HTTP 头标外,返回给客户端的字节数。
三、分析日志文件
有了日志文件后,我们可以利用 UNIX 的一些工具和一此专门的日志分析工具对日志文件
进行分析。
实例一:列出访问过本网站的主机名或 IP:
对于这个需求,我们可以通过一个 Unix 的一个脚本语句来完成:
cat /var/log/httpd/access_log | awk '{print $1}'
用上面的方法虽然可以得到访问过本网站的主机名或 IP,但是由于有些是多次访问的,
我们希望在上面得到的结果的基础上做一些优化,使得列出的表中,每个主机只出现一
次。我们可以使用:
cat /var/log/httpd/access_log | awk '{print $1}' | wc -l
3.当然,我们可以根据需要选择第三方提供日志分析工具甚至自己开发一些日志分析工
具来满足我们的需求。常见的第三方日志分析工具有:WebTrends、Wusage、wwwstat、
http-analyze、pwebstats、WebStat Explorer、AccessWatch。
四、一些提示
日志一方面是我们分析网站的第一手资料,一方面却是吞噬大量磁盘空间的罪魁祸首。
所以别忘了定期转储或删除一些老的日志文件。
Apache 与代理服务器
代理服务器是位于客户和客户要访问的服务器之间的系统。当客户机使用 URL 请求
访问远程资源时,代理服务器接受该请求并取得该资源以满足客户机的请求。在通常情
况下,代理服务器是客户机的服务器,同时也是远程服务器的客户。
代理服务器可以在自己的缓冲区中存储被请求的内容,当这些信息再次被请求的时
候,代理服务器就无需再从远程服务器上取了,这样代理服务器就减轻了网络的瓶颈问
题。
Apache 可以配置成为代理服务器。
一、前向代理服务器和逆向代理服务器
1.前向代理服务器
前向代理服务器通常位于用户主机和要访问的远程网络之间。它从远程服务器取得所要
求的资源,然后返回给用户,同时存在磁盘上,以供下次使用。
在这种情况下,客户端的主机知道它们正在使用代理服务器,因为每个主机都必须配置
为使用代理服务器。
例如,必须告诉 WWW 浏览器使用代理服务器,它才能使用代理服务器。所有的远程请求
都通过代理服务器传输。
这类代理服务器也称为缓冲代理服务器。逆向服务器也可以缓冲数据,但它的作用愉好
与前向服务器相反。
2.逆向代理服务器
逆向代理服务器位于互联网资源前面,逆向服务器从原始服务器找到被请求的资源,并
反它返回给用户主机。
与前向代理服务器不同的是,逆向代理服务器的用户并不知道它们连接的是代理服务器
而不是资源服务器本身。其结构如下图所示:
二、配置代理服务器
为了允许 Apache 作为代理服务器,需要将 ProxyRequests 设为 On,然后根据你希
望代理服务器做什么而增加什么附加配置。无论你希望做什么,你所选的代理配置都应
该放入一个特殊?lt;Directory>容器中。
<Directory proxy:*>
…
</Directory>
实例一:将私有 IP 网连到互联网
假设私有网上只有一台计算机被分配了互联网上合法的 IP 地址,这台计算
机运行 Apache 代理服务器,ProxyRequest 设置为 On,并且不需要附加其他配置,所有
请求均可由这台代理服务器代理服务。
实例二:让 Apache 允当远程 WWW 站点的缓冲
第一步:将 ProxyRequest 设置为 On
第二步:创建配置如下:
<Directory proxy:*>
CacheRoot /www/cache
CacheSize 1024
CacheMaxExpire 24
</Directory>
这里的意思是设置 Cache 目录为/www/cache;大小为 1024KB,即 1MB;缓冲中的内容在
24 小时后失效。
实例三:建立镜像站点(其实这也就是所谓的逆向代理服务器)
第一步:将 ProxyRequest 设置为 On
第二步:创建配置如下:
<Directory proxy:*>
ProxyPass / www.mot.com /
CacheRoot /www/cache
CacheDefaultExpire 24
</Directory>
10.3 一些提示
代理服务器,我们将会在后面的章节中详细介绍,这里只是针对 Apache 的功能介绍的。
用 Apache 作代理服务器的性能并不高,效果并不好。不建议使用。
安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens
注意事项:
1.如果妳是用 Redhat based 的 Linux 的话,请执行 ntsysv 将 httpd 和 Mysql 不要
执行
2.将 DOWNLOAD 的档案放到相同的目录,再用 tar zxvf xxxxxxxx.tar.gz 来解压缩,
请依照要安装的软件进入适当的目录。
3.可以到 http://linuxnews.idv.tw/download/ 来下载所需的程序。
MySQL:
---------------------------------------------------------------
./configure --prefix=/usr/local/mysql --with-charset=big5
make
make install
cd scripts
./mysql_install_db
cd /usr/local/mysql/share/mysql/
chmod 611 mysql.server
./mysql.server start
#编辑 /etc/rc.d/rc.local 加入底下这行以便开机时自动执行 mysql
/usr/local/mysql/share/mysql/mysql.server start
imap:
---------------------------------------------------------------
make slx
cp ipopd/ipop*.* /usr/sbin
cp imapd/imapd /usr/sbin
cp c-client/c-client.a /usr/local/lib
#请确定你有 /usr/local/include 这个目录
cp c-client/rfc822.h /usr/local/include
cp c-client/mail.h /usr/local/include
cp c-client/linkage.h /usr/local/include
GD:
---------------------------------------------------------------
make
make install
Ldap:
---------------------------------------------------------------
./configure --prefix=/usr/local/ldap
make
make depend
cd tests
make
cd ..
make install
Apache:
---------------------------------------------------------------
./configure --prefix=/usr/local/apache
openssl:
---------------------------------------------------------------
./config
make
make test
make install
mod_ssl:
---------------------------------------------------------------
./configure --with-apache=../apache_1.3.19 --with-ssl=../openssl-0.9.6
--prefix=../apache_1.3.19
php:
---------------------------------------------------------------
./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.19
--enable-track-vars --with-gd=../gd-1.8.4 --with-imap=../imap-4.7c
--enable-ftp --with-ldap=/usr/local/ldap
make
make install
Apache:
---------------------------------------------------------------
./configure --prefix=/usr/local/apache
--activate-module=src/modules/php4/libphp4.a --enable-module=ssl
make
make certificate
#这时会问你一些问题,就是有关于加密的问题,最后要要求输入启动的密码,如果输入
密码的话以后启动 httpd 的时候会询问密码,若不输
#入密码的话启动就不会问了
#PS.启动 http
#要加密:apachectl startssl
#不加密:apachectl start
make install
修改 /etc/rc.d/rc.local 加入 /usr/local/apache/bin/apachectl start 来开机时
自动启动 Apache
再来就是修改 /usr/local/apache/conf/httpd.conf 的设定档,将 php 的支持加入
建立 Apache 站点的基本安全机制
对于 WWW 服务来说,在 WWW 服务器和 WWW 浏览器之间并不始终维持对话过程。办要 WWW
服务器完成对一个 URL 请求的服务,连接就断开了。
在这种情况下,在 WWW 上保证可以使用的唯一认证机制是由 HTTP 本身提供 的。在标准
的 Apache 服务器实现了这样的认证,它能控制哪些主机可能访问特定的站点或特点的站
点的一部分。
这种认证可以分为两种,一种是基于主机的的认证,另一种是基于用户名/口令的认证。
由于互联网上的决大多数用户的 IP 地址是动态获得的,所以基于主机的认证方式并不总
适用。所以在大多数情况下,传统的基于用户名/口令的认证方式更为现实。下面我们就
对这两种认证的实现做一简要的介绍。
1. 基于主机的认证方式
在种认证模式顾名思义,访问是用主机名或主机 IP 地址来控制的。支持这种认证方式的
是 Apache 的 mod_access 模块,这个模块缺省状态下是被安装了的。该模块用以下几种
Apache 命令来提供访问控制功能。
allow 命令
语法:allow from host1 host2 host3 ...
这个命令定义了允许访问站点或目录的主机清单。主机清单可以用以下几
种形式表示:
ALL:代表所有主机;
主机的全域名,如:www.mot.com;
主机的部分域名,如:.mot.com;
完整的 IP 地址,如:202.98.2.32;
部分 IP 地址,如:202.98
网络地址/网络掩码对,如:202.98.0.0/255.255.0.0
网络地址/nn(CIDR 定义),如:202.98.0.1/16
deny 命令
语法:deny from host1 host2 host3 ...
这个命令定义了禁止访问站点或目录的主机清单,其他与 allow 命令相似。
order 命令
语法:order deny,allow | allow,deny
这个命令定义评价 allow 和 deny 命令的先后顺序。
例如:
<Directory /home/httpd/html>
order deny,allow
deny from www.mot.com
allow all
</Directory>
这组命令设置了禁止 www.mot.com 访问/home/httpd/html 目录下的文件。
请大家注意,顺序是先 deny 后 allow,如果是:order allow,deny 那么,先允许所有
的主机访问,然后再禁止,这样是无效的,所有主机仍然能够访问。
2. 基于用户名/口令的认证方式
这种认证方式其实相当简单,当 WWW 浏览器请求经此认证模式保护的 URL
时,将会出现一个对话框,要求用户键入用户名和口令。用户输入后,传给 WWW 服务器,
WWW 服务器验证它的正确性,如果正确,返回页面,否则返回 401 错误。要说明的一点
是,这种认证模式是基本的,并不能用于安全性要求极高的场合。
Apache 中有许多模块可以支持这种认证方式,下面我们就介绍一下最基本、最标准的
mod_auth 模块。正如前面提到的一样,mod_auth 模块使用存储在文本文件中的用户名、
组名和口令来实现认证。这种方法非常适合处理少量用户,它能工作得很好。如果你需
要对大量的用户,如数以千计的用户做认证时,这种方法的性能将急剧下降到不可忍受,
所以当这种情况下,就需要考虑使用 mod_dbm 模块或 mod_mysql 模块来获得更好的性能。
实例一:需要用户名和口令的访问控制
下面我们就一起来看一下如何建立需要用户名/口令才能进行访问的目录。
基本情况: www.xxx.com
的站点有设置为:
DocumentRoot /home/httpd/html
AccessFileName .htaccess
AllowOverride All
需求:限制/home/httpd/html/backup/目录的访问,只允许用户"super"以口令"fill-06"
访问此目录。
实现步骤:
使用 htpasswd 建立用户文件
htpasswd -c /home/httpd/secr/.htpasswd super
此程序会询问用户"super"的口令,你输入"fill-06",两次生效。
建立.htaccess 文件
用 vi 在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
以下几行:
AuthName My Friend Only (注:这个名字是任取的)
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
require user super
设置文件权限,确保 Apache 用户有读的权限
这样就完成了设置工作,你可以试一试效果了。
实例二:允许一组用户访问一个目录
假设,现在 www.xxx.com 想让 myfriend 组中的 mf1 与 mf2 两个用户分别能
使用口令"mf001-1""mf002-2"访问/home/httpd/html/backup/目录。
实现步骤:
使用 htpasswd 建立用户文件
htpasswd -c /home/httpd/secr/.htpasswd mf1
htpasswd -c /home/httpd/secr/.htpasswd mf2
建立组文件
用 vi/home/httpd/secr/目录下建立一个文件.htgroup,写入:
myfriend:mf1 mf2
建立.htaccess 文件
用 vi 在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
以下几行:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
配置工作到此结束,试一试吧!
实例三:混合使用基于主机与基于用户名/口令的认证方式
如果你除了只允许让 mf1 与 mf2 两个用户访问外,还想禁止除 www.mot.com
外的主机访问这个目录的话,就将/home/httpd/html/backup/.htaccess 修改成为:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
order deny,allow
deny from all
allow from www.mot.com
使用 Apache,是世界排名第一的 WEB 服务器。Apache 的诞生极富有戏剧性。当 NCSA WWW
服务器项目停顿后,那些使用 NCSA WWW 服务器的人们开始交换他们用于该服务器的补丁
程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了 Apache
Group,后来这个团体在 NCSA 的基础上创建了 Apache。
Apache 的主要特征是:
. 可以运行上所有计算机平台;
. 支持最新的 HTTP 1.1 协议;
. 简单而强有力的基于文件的配置;
. 支持通用网关接口 CGI;
. 支持虚拟主机;
. 支持 HTTP 认证;
. 集成 Perl 脚本编程语言;
. 集成的代理服务器;
. 具有可定制的服务器日志;
. 支持服务器端包含命令(SSI)
. 支持安全 Socket 层(SSL)
. 用户会话过程的跟踪能力;
. 支持 FastCGI;
. 支持 Java Servlets。
安装 Apache
下面我们就开始漫漫征服 Apache 之旅,通过循序渐进的需求实例,一步步地学习使
用 Apache,从入门到精通。
系统需求
运行 Apache 不需要太多的计算资源。它在有 6-10MB 硬盘空间和 8MB RAM Linux
系统上运行得很好。然而,只运行 Apache 可能不是你想做的事情。更可能的是,你想运
行 Apache 来提供 WWW 服务、启动 CGI 进程以及充分利用所有 WWW 能够提供的令人惊奇的 功能。在这种情况下,你需要提供反映负载要求的额外的磁盘空间和内存空间。也就是
说,如果仅仅是启动 WWW 服务并不需要太多的系统资源,但是想要能为大量的客户提供
服务就需要更多的系统资源。
获取软件
你可以在 http://www.apache.org 中获得 Apache 的...梢灾苯邮褂盟 ?/a>
需要注意的是,Apache 软件包有两种:一种是源代码,下载后需要自己重新编译;另一
种是可执行文件,下载后只需解压就可以使用。
安装软件
你可以通过以下三种方法安装 Apache 服务器。
1.如果你安装的 Linux 版本中带用 Apache 的话,就在选择所要安装的服务器的时
候,将 httpd 这个服务选上,Linux 安装程序将自动完成 Apache 的安装工作,并做好基
本的配置。
2.使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级用户,因
为它相对比较简单。
下载软件包 apache_1.2.4.e.tar.gz
tar xvzf apache_1.2.4.e.tar.gz
这就完成了安装工作,简单吧!
如果你使用的是 RedHat Linux 的话,你也可以下载 apache_1.2.4.rpm 软件安装包,
然后使用 rpm -ivh apache_1.2.4.rpm 命令安装。
3.如果你想把 Apache 服务器充分利用起来的话,就一定要自己编译 Apache 定制其
功能。
下载包含 Apache 源代码的软件包 apache_1.2.4.tar.gz;然后用 tar 命令将它解开;将
当前目录改变为 Apache 源代码发行版的 src 目录; 将配置样本文件
(Configuration.tmpl)复制为 Configuration 文件;
编辑 Configuration 文件中的配置选项:
Makefile 配置选项:一些编译选项:
. "CC="一行指定用什么编译软件编译,一般为"CC=gcc";
. 如果需要将额外的标志(参数)指定给 C 编译软件,可以使用:
EXTRA_CFLAGS=
EXTRA_LFLAGS=
. 如果系统需要特殊的库和包含文件,可以在这里指定它们:
EXTRA_LIBS=
EXTRA_INCLUDES=
. 如果你要改变代码优化设置的话,你须将下面一句去掉注释,然
后改成你所需要的值:
#OPTIM=-O2
Rule 配置选项:用来决定需要什么功能,一般情况下无需改变。
模块配置:模块是 Apache 的组成部分,它为 Apache 内核增加新功能。通过使用模块配
置,可以自定义在 Apache 服务器中需要什么功能,这个部分也是 Apache 灵活性的表现。
模块配置行如下所示:
AddModule modules/standard/mod_env.o
如果你需要 Apache 服务器具备什么功能,就将那个模块用 AddModule 语句加到配置文件
Configuration 中去。
下表列出了 Apache 的模块功能:
模块名 功能 缺省
mod_access 提供基于主机的访问控制命令 y
mod_actions 能够运行基于 MIME 类型的 CGI 脚本或 HTTP 请求方法 y
mod_alias 能执行 URL 重定向服务 y
mod_asis 使文档能在没有 HTTP 头标的情况下被发送到客户端 y
mod_auth 支持使用存储在文本文件中的用户名、口令实现认证 y
mod_auth_dbm 支持使用 DBM 文件存储基本 HTTP 认证 n
mod_auth_mysql 支持使用 MySQL 数据库实现基本 HTTP 认证 n
mod_auth_anon 允许以匿名方式访问需要认证的区域 y
mod_auth_external 支持使用第三方认证 n
mod_autoindex 当缺少索引文件时,自动生成动态目录列表 y
mod_cern_meta 提供对元信息的支持 n
mod_cgi 支持 CGI y
mod_dir 能够重定向任何对不包括尾部斜杠字符命令的请求 y
mod_env 使你能够将环境变量传递给 CGI 或 SSI 脚本 n
mod_expires 让你确定 Apache 在服务器响应请求时如何处理 Expires y
mod_headers 能够操作 HTTP 应答头标 y
mod_imap 提供图形映射支持 n
mod_include 使支持 SSI n
mod_info 对服务器配置提供了全面的描述 y
mod_log_agent 允许在单独的日志文件中存储用户代理的信息 n
mod_log_config 支持记录日志 y
mod_log_referer 提供了将请求中的 Referer 头标写入日志的功能 n
mod_mime 用来向客户端提供有关文档的元信息 y
mod_negotiation 提供了对内容协商的支持 y
mod_setenvif 使你能够创建定制环境变量 y
mod_speling 使你能够处理含有拼写错误或大小写错误的 URL 请求 n
mod_status 允许管理员通过 WEB 管理 Apache y
mod_unique_id 为每个请求提供在非常特殊的条件下保证是唯一的标识 n
在 src 目录下执行:". /configure";
编译 Apache:执行命令"make";
根据机器性能的不同,经历一段 5-30 分钟的编译,就大功告成了。
将编译好的可执行文件 httpd 复制到/etc/httpd/bin 目录下;
将 Apache 发行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf 文件
复制到/etc/httpd/conf 目录下。到此为止,安装完成。
一些说明
在 Red Hat Linux 6.0 中,Apache 将自己的所有配置文件和日志文件放在了"/etc/httpd"
目录下,其中"/etc/httpd/conf"下为配置文件,"/etc/httpd/log"下为日志文件。
同时,它将建立"/home/httpd"目录,并在其下建立三个子目录:"html/":在这个目录
下存放 HTML(主页)文件;"cgi-bin/":在这个目录下可以存放一些 CGI 程序;"icons/":
在这个目录下是服务器自带的一些图标。
配置 Apache 基础篇,让 WWW 服务器跑起来
Apache 服务器软件的配置文件主要有:"access.conf":用于设置系统中的存取方式和
环境;"httpd.conf":用于设置服务器启动的基本环境;"srm.conf":主要用于做文件
资源上的设定;"mime.type":记录 Apache 服务器所能识别的 MIME 格式。
在具体讲解之前,我们必须告诉大家,Apache 已经在安装时就采用了一系列的缺省值,
已经让 WWW 服务器跑起来了。你只需要将装上 Linux+Apache 的主机联入 Internet,然
后将主页存放到"/home/httpd"目录下即可。
下面介绍一些最主要的配置选项的含义,以便大家用最小的精力、最小的配置准备好服
务器。
httpd.conf
tpd.conf 是主配置文件。它告诉服务器将如何运行。
一、最重要的配置选项 ServerType standalone | inetd
这个配置选项指定如何运行 WEB 服务器。Apache 可以使用两种方法来运行服务器:
standalone(独立的)和 inetd(由 inetd 运行的)。standalone 参数表示 WEB 服务进程以
一个单独的守候进程的方式在后台侦听是否有客户端的请求,如果有就生成一个子进程
来为其服务。inetd 参数表示 WEB 服务不是以一个单独的守候进程的形式支持。而是由
Inetd 这个超级服务器守候进程进行代劳,当它收到一个客户端的 WEB 服务请求的时候,
再启动一个 WEB 服务进程为其服务。从功能的角度看,这两种方法几乎是相同的。但它
们之间实际有很大区别,区别在于服务器的性能。一个由 inted 运行的服务器进程在它
结束对请求服务的同时立刻退出。而在 standalone 模式下,子 WWW 服务器进程在退出之
前要挂起一段时间,这就给它们提供了机会,可以重新用来服务新的请求。
在 standalone 模式下,不存在对每个请求启动新进程的开销,所以它的效率更高;而
inetd 模式被认为比 standalone 模式更具安全性。
standalone 模式:
此种模式下,WWW 服务器侦听特定端口的连接请求。当客户机发出到特定端口地址的连
接请求时,主服务器进程启动子 WWW 服务进程来服务该请求。另外还需要告诉主服务器
进程侦听的特定端口地址,使用命令:
Port [number] (缺省值为 80)
inetd 模式
inetd 是侦听有小于 1024 的端口连接请求的 Internet 守护进程(一个服务器进程)。与
前面的方法不同,当客户系统发出到 WWW 服务器的连接请求时,inetd 启动一个 WWW 服
务器进程,由此进程服务此请求,完成服务后即退出。如果选择通过 inetd 服务器来运
行 Apache,需要编辑/etc/inetd.conf 文件为 Apache 添加一条新的记录:
httpd stream tcp nowait httpd /etc/httpd/bin/httpd -f
/etc/httpd/conf/httpd.conf
修改了/etc/inetd.conf 文件后,就需要修改/etc/services 中添加一行
httpd 80/tcp httpd
做完以上修改后,需要重新启动 inetd 进程。首先,使用以下命令取得 inetd 的进程 ID:
ps auxw |grep inetd
然后执行命令:kill -HUP <inetd 的进程 ID>
在 RedHat Linux 中,默认是采用 inetd 服务器来运行 Apache,所以只要你在安装时选
择了 httpd,以上工作在安装时就已经代你完成了。
二、其它配置选项
Server Admin 命令,用来设置 WEB 管理员的 E-Mail 地址。这个地址会出现在系统
连接出错的时候,以便访问者能够将情况及时地告知 WEB 管理员。
命令格式: Server Admin [you E-Mail address]
例:Server Admin [email protected]
ErrorLog 命令,用来指定错误记录文件名称和路径。
命令格式: ErrorLog [log filename]
例:ErrorLog /var/httpd/error.log
Timeout 命令,只要客户端超过这里设定的秒数还没有完成一个请求的话,服务端将终
止这次请求服务。如果网络速度较慢的话,建议在此设置较大的数值。以给客户端更多
机会。
命令格式: Timeout [second]
例:Timeout 120
ServerRoot 命令,它指定在何处保存服务器的配置、错误及日志文件。
命令格式: ServerRoot [fully qualified path name]
例:ServerRoot /etc/httpd
ServerName 命令,它配置服务器的 Internet 主机名
命令格式: ServerName [host name]
例:ServerName www.xxx.com
srm.conf
srm.conf 是资源配置文件,用它来告诉服务器你想在 WWW 站点上提供什么资源以及在哪
里和如何提供们。
DocumentRoot 命令,用来指定主文档的地址。
命令格式: DocumentRoot [Path]
例:DocumentRoot /home/httpd/html
UserDir 命令,用来指定个人主页的位置。如果你有一个用户 test,那么它主目录是
"/home/test",当客户端输入"http://yourdomain/~test",系统就会到对应的目录
"/home/test/UserDir/"中去寻找。其中"UserDir"就是在 UserDir 命令中设置的指定目
录。
命令格式: UserDir [Path]
例: UserDir Public_html
DirectoryIndex 命令,用来声明首页文件名称。一般地,我们使用"index.html"或
"index.htm"作为首页的文件名。如果这样设置后,那么客户端发出 WEB 服务请求时,将
首先调入的主页是在指定目录下文?quot;index.html"或"index.htm"。
命令格式: DirecotryIndex [filename]
例:DirecotryIndex index.html index.htm
ScriptAlias 命令,为脚本程序目录起个别名,具体可见 4.7 小节。
命令格式: ScriptAlias [/alias/] [fullly qualified path for script directory]
例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin
access.conf 的配置
access.conf 文件用来设置 WWW 站点上诸如文件、目录和脚本项目的访问权限。该文件
的第一段非注释部分如下:
<Directory /home/httpd/html>
Option Indexes Includes ExecCGI FollowSymLink
AllowOverride None
Order allow , deny
allow from all
</Directory>
大家应该注意到,这一个部分是以<Directory /home/httpd/html>开始,以</Directory>
结束的。这表示在其中间的部分都是针对指定目录��"/home/httpd/html"而言的。
1.Option 命令有很多的参数,各个参数的意义如下所示:
All 准许以下所有功能(MultiViews 除外);
MultiViews 准许内容协商的 Multiviews;
Indexes 若该目录下无 index 文件,则准许显示该目录下的文件以供选择;
IncludesNOEXEC 准许 SSI(Server-side Includes),但不可使用#exec 和#include 功能;
Includes 准许 SSI;
FollowSymLinks 准许符号链接到其他目录;
ExecCGI 准许该目录下可以使用 CGI。
2.而 AllowOverride 命令则是用来决定是否准许在"access.conf"文件中设定的权限是
否可以被在文件".htaccess"中设定的权限覆盖。它有两个参数:
All 准许覆盖;
None 不准许覆盖。
3.Order 命令:用来设定谁能从这个服务器取得控制。它也有两个参数:
allow 可以取得控制;
deny 禁止取得控制。
现在我们一起来看看关于目录"/home/httpd/html"的设置的含义:它使得这个目录,如
果不存在 index.htm 文件时,列出目录信息以供选择,准许 SSI,允许执行 CGI 程序,
开启了动态连接。它不允许再使用在文件".htaccess"中设定来覆盖这里所设置的权限。
使所有的人都可以取得控制。
该文件的第二段非注释部分如下:
<Directory /home/httpd/cgi-bin>
Option ExecCGI
AllowOverride None
</Directory>
这个表示目录"/home/httpd/cgi"的设置为,当前目录下可以执行 CGI 程序。不允许再使
用在文件".htaccess"中设定来覆盖这里所设置的权限。
需要说明的是,不同的 LINUX 系统中,可以在这个文件中看到的信息不完全相同,但是
根据这里给出的信息,大家可以参照命令的解释自行理解文件中的设置,以及根据自己
的需要进行相应的修改。
4.4 使新的配置生效
在上面,我们可能已经根据新的需求更改了相应的配置选项,如果我们要使得这个新的
配置立即生效。我们就必须重新启动 WEB 服务进程。在 LINUX 中,我们可以十分方便地
使用命令行来使得 WEB 服务进程重启。
/etc/rc.d/init.d/httpd restart
五、为用户开辟个人主页空间
如果我们利用了 LINUX 系统架设了一台 WEB 服务器,我们不仅可以存放公司的主页,而
且还可以为公司的每一个员工提供一块个人主页的空间。
首先,为需要个人主页空间的员工在 LINUX 上开设一个帐号。这样,它就拥有了一个用
户主目录"/home/用户帐号名"。
addusr 用户帐号名
passwd 用户帐号名
在用户主目录下建立一个目录"public_html",然后为其设置相应的权限。
cd ~用户帐号名
mkdir public_html
chmod 755 public_html
确认在 srm.conf 文件中的 UserDir 命令设置的是 public_html 目录。让员工将自己的个
人主页上传到自己用户主目录下的 public_html 目录中。
现在就可以使用"http://www.company.com/~用户帐号名"来访问员工的个人主页了。
用 Apache 实现虚拟主机服务
什么是虚拟主机服务
所谓的虚拟主机服务就是指将一台机器虚拟成多台 WEB 服务器。举个例子来说,一
家公司想从事提供主机代管服务,它为其它企业提供 WEB 服务。那么它肯定不是为每一
家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚
拟主机的形式,提供多个企业的 WEB 服务,虽然所有的 WEB 服务就是这台服务器提供的,
但是让访问者看起来却是在不同的服务器上获得 WEB 服务一样。
具体地说,就是,我们可以利用虚拟主机服务将两个不同公司 www.company1.com
与 www.company2.com?..玫降闹饕衬谌荨?/a> 用 Apache 设置虚拟主机服务通常可以采
用两种方案:基于 IP 地址的虚拟主机和基于名字的虚拟主机,下面我们分别介绍一下它
们的实现方法。以便大家在具体的应用中能够选择最合适的实现方法。
设置实现基于 IP 地址的虚拟主机服务实现前提
这种方式需要在机器上设置 IP 别名,也就是在一台机器的网卡上绑定多个 IP 地址
去为多个虚拟主机服务。而且要使用这项功能还要确定在你的 LINUX 内核中必须支持 IP
别名的设置,否则你还必须重新编译内核。
下面举一个拥有两个虚拟主机的服务设置,以供参考。
2.配置步骤
假设,我们用来实现虚拟主机服务的机器,首先已经为自己提供了 WEB 服务,现在将为
新的一家公司 www.company1.com 提供虚拟主机服务。
规划 IP 地址:为虚拟主机申请新的 IP 地址。(假设本机 IP 地址为 202.101.2.1)
www.company1.com 202.101.2.2
2) 让 ISP 作好相应的域名解析工作。
3) 为网卡设置 IP 别名:
/sbin/ifconfig eth0:0 202.101.2.2 netmask 255.255.255.0
4) 重新设置"/etc/httpd/conf/httpd.conf",在文件中加入:
<VirtualHost 202.101.2.2>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company1.com
ServerName www.company1.com
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
5)建立相应的目录。
mkdir /home/httpd/www.company1.com
mkdir /var/log/httpd/www.company1.com/error.log
6)将相应的主页内容存放在相应的目录中即可。
3.不利因素
这种虚拟主机的实现方法有一个严重的不足,那就是,每增加一个虚拟主机,就必须增
加一个 IP 地址。而由于 IP 地址空间已经十分紧张,所以通常情况下是无法取得这么多
的 IP 地址的。而且从某种意义上说,这也是一种 IP 地址浪费。设置实现基于名字的虚
拟主机服务而基于名字的虚拟主机服务,是比较适合使用的一种方案。因为它不需要更
多的 IP 地址,而且配置简单,无须什么特殊的软硬件支持。现代的浏览器大都支持这种
虚拟主机的实现方法。当然,这也就是指一些早期的客户端浏览器也许不支持这种虚拟
主机的实现方法。
正是以上原因,我们没有理由不使用基于名字的虚拟主机服务而使用基于 IP 地址的
虚拟主机服务。配置基于名字的虚拟主机服务需要修改配置文
件?quot;/etc/httpd/conf/httpd.conf",在这个配置文件中增加以下内容。
NameVirtualHost 202.101.2.1
<VirtualHost 202.101.2.1>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company1.com
ServerName www.company1.com
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
<VirtualHost 202.101.2.1>
ServerAdmin [email protected]
DocumentRoot /home/httpd/www.company2.com
ServerName www.company2.com
ErrorLog /var/log/httpd/www.company2.com/error.log
</VirtualHost>
也就是在基于 IP 地址的配置基础上增加一句:NameVirtualHost 202.101.2.1 而已。
在本例中,为了体现只需要增加一次,所以特别地设置了两个虚拟主机服务。
最后也是建立相应的目录,将主页内容放到相应的目录中去就可以了。
配置 CGI
1. 什么是 CGI
CGI 是独立于语言的网关接口规范,它实际上可以用任何广泛流行的应用程序开发语言
来实现,包括 C、C++、Perl、Shell 脚本甚至 Java。
WEB 服务器从客户端得到某个 URL,它告诉 WEB 服务器,必须运行一个 CGI 外部应用程序。
那么 WEB 服务器启动这一应用程序,等待它完成并返回输出结果。最后,它将此应用程
序的输出结果传输给另一端的 WEB 客户。
2. 为 CGI 配置 Apache
那么如何使 Apache 能处理 CGI 请求呢?我们必须通过相应的配置过程告知 Apache 在哪
里存储 CGI 程序,指明 CGI 程序的扩展等,以下我们逐一介绍一下设置的内容与步骤。
创建存储 CGI 程序的目录
创建集中的 CGI 程序目录只是建立 CGI 环境的开始。如果要考虑提高安全
性的话,应将集中的 CGI 程序目录保存在 DocumnetRoot 目录外,使得访问者不能直接访
问 CGI 程序。 第一步:在 DocumentRoot 目录外创建一个目录,然后将所有的 CGI 程序
都集中存放在这个目录下。例如,你可创建一个/home/httpd/public/apps 的目录作为
CGI 程序的大本营。
第二步:为 CGI 程序目录创建别名,也就是编辑配置文件 httpd.conf,加入:
ScriptAlias /cgi-bin/ /home/httpd/public/apps
这样做后,当客户访问 www.xxx.com/cgi-bin/li.cgi 时,WEB 服...ps/li.cgi 文件。
第三步:为 CGI 目录设置合适的权限,一般是只允许 Apache 有读取和执行的权限但没有
写的权限。
允许用户访问 cgi-bin
我们已经在 4.5 小节中介绍了如何给用户开辟个人主页空间,但如果你的
用户需要使他的主页更具有活力,往往会向你申请 cgi-bin 访问服务。下面我们就介绍
一个 Apache 服务器为用户提供的两种 cgi-bin 访问方法。
1)使用 Directory 或 DirectoryMatch 容器
当在配置文件 srm.conf 中用 UserDir 命令被赋值为目录名称时,Apache 就
把它作为用户 WWW 站点的顶层目录。例如:
UserDir Public_html
当 Apache 接到 www.xxx.com/~user 的请求,就到/home/...饕撤⑺透 突 А?/a>
如果要为每个用户添加 CGI 支持就在 Apache 的配置文件 access.conf 中添加下列配置:
<DirectoryMatch "/home/[a-z]+/public_html/cgi-bin">
Options ExecCGI
AddHandler cgi-script .cgi .pl
</DirectoryMatch>
注:将 DirectoryMatch 换成 Directory 亦可
在这种方法中,Apache 服务器将 www.xxx.com/~user/cgi-bin 请求翻译成...未 姓
防┱姑?/a>(.cgi 或.pl)的 CGI 程序。
使用 ScriptAliasMatch 命令
通过使用 ScriptAliasMatch 命令,也可以为每个用户添加 CGI 支持。例如:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2
这个命令将用户名与$1 相匹配,其中$1 与~([a-z]+)相等。将/cgi-bin/后面的任何内容
与$2 相匹配,其中$2 与(.*)相等。
这个设置也就实现了将 www.xxx.com/~user/cgi-bin/xxx.cgi 请求解释为:
/home/user/Public_html/cgi-bin/xxx.cgi
那么大家想一想,如果你想将这个请求解释为:
/home/httpd/public/apps/xxx.cgi
该如何设置呢?对,应该是:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2
3. Apache 为 CGI 提供的环境变量
Apache 服务器提供了许多环境变量可以用于 CGI 程序的编写,了解它们也一定有助于写
出充分利用 Apache 的 CGI 程序,所以在此也对此作一简单介绍。
服务器变量
服务器变量由 Apache 设置用来通知 CGI 程序有关 Apache 的情况。通过使
用这些变量,CGI 程序能确定有关服务器的不同信息:Apache 的版本,管理员的 E-Mail
地址等。
SERVER_SOFTWARE
这个变量是 WWW 服务器 Apache 的版本号,它的值形如:Apache/Version,如 Apache/1.3;
GATEWAY_INTERFACE
这个变量的值是当前 CGI 规范的版本号,其值形如:CGI/1.1;
SERVER_ADMIN
如果在 httpd.conf 文件中有设置站点管理员的 e-mail 地址的话,这个变量就会存放着
这个 e-mail 地址;
DOCUMENT_ROOT
这个变量存放在是被访问的 WWW 站点的 DocumentRoot 命令指定的值。
客户请求变量
Apache 提供的有关客户请求方的环境变量有许多,以下只是有选择性地介绍一些最常见
的。
SERVER_NAME
此变量可以告诉 CGI 程序它访问的是哪一个主机。这个值可以是 IP 地址也可以是完整的
主机名;
HTTP_ACCEPT
此变量被赋值为客户所能接受的 MIME 类型的列表,如:HTTP_ACCEPT=image/gif;
HTTP_ACCEPT_CHARSET
此变量被赋值为客户所能接受的字符集,如:
HTTP_ACCEPT_CHARASET=iso-8859-1.,*,utf-8;
HTTP_ACCEPT_LANGUAGE
此变量被赋值为客户所能接受的语言,如:HTTP_ACCEPT_LANGUAGE=en;
HTTP_ACCEPT_AGENT
这个变量指定发出请求的系统正在运行的浏览器类型和操作系统;
HTTP_PORT:服务端口;
REMOTE_HOST:客户端的 IP 地址或 IP 名称信息;
REMOTE_PORT:客户端的端口号;
4. 一点提示
若干年来,通过网关接口(CGI)已成为服务器端应用程序开发的事实标准。但随着时间
的推移,发现在沉重的 CGI 负担下许多 WWW 服务器系统的表现不尽人意。这是因为 CGI
规范存在瓶颈问题:每当客户系统请求 CGI 应用程序时,WWW 服务器就必须启动新的 CGI
进程,直到完成任务后结束进程。这在负载不高时,会工作正常。但是,在高负载时,
繁多的进程将成为性能的瓶颈问题。
所以现在开始出现新的标准来弥补这一不足,其中 FastCGI 是很有前途的一种新的开放
式标准。
你可以在 Apache 中通过添加 mod_fastcgi.c 模块来支持 FastCGI。
解读 Apache 日志
当你一步步地看到这里的时候,相信你的 WWW 站点已经建好,并且已经在 Internet
上展现出来了。这时你可能就会关心谁造访过你的站点,或者想知道你的 Apache 服务器
现在的运行状态与性能如何。下面我们一起通过解读 Apache 的日志来实现这个伟大的愿
望。
一、盯着 Apache 服务器
Apache 允许通过 WWW 监视服务器的配置信息与运行状态。
1.观看配置信息
如果你的 Apache 象缺省配置一样加入了 mod_info 模块的话,你就可以通过访问
http://localhost/server-info 查看服务器信息。
2.使用状态页
如果你的 Apache 象缺省配置一样加入了 mod_status 模块的话,你就可以
通过访问 http://localhost/apache-status 查看?..畔ⅲ 渲邪 ǎ?/a>
¨ 服务器系统的当前时间;
¨ 服务器最近一次重启时间;
¨ 服务器启动后的运行时间;
¨ 到目前为止服务的访问总数;
¨ 到目前为止传输的字节总数;
¨ 服务请求的子进程数;
¨ 空闲子进程数;
¨ 每个进程状态、子进程服务的请求数以及该子进程传输的字节总数;
¨ 每秒平均请求数、每秒传输的字节数、每次请求平均传输字节数;
¨ 目前每个子进程 CPU 占用及 Apache 的总的 CPU 占用率;
¨ 当前主机及处理的请求。
二、什么是日志文件
日志文件是 Apache 工作的记录,Apache 包括了 mod_log_config 模块,它用来记录日志。
在缺省情况下,它用通用日志格式 CLF 规范来写。CLF 日志文件内对每个请求均有一个
单独行,形如:host ident anthuser date request status bytes
其含义如下:
¨ host��客户端主机的全称域名或 IP 地址;
¨ ident��存放客户端报告的识别信息;
¨ authuser��如果是基于用户名认证的话,值为用户名;
¨ date��请求的日期与时间;
¨ request��客户端的请求行;
¨ status��返回到客户端的三们数字的 HTTP 状态码;
¨ bytes��除去 HTTP 头标外,返回给客户端的字节数。
三、分析日志文件
有了日志文件后,我们可以利用 UNIX 的一些工具和一此专门的日志分析工具对日志文件
进行分析。
实例一:列出访问过本网站的主机名或 IP:
对于这个需求,我们可以通过一个 Unix 的一个脚本语句来完成:
cat /var/log/httpd/access_log | awk '{print $1}'
用上面的方法虽然可以得到访问过本网站的主机名或 IP,但是由于有些是多次访问的,
我们希望在上面得到的结果的基础上做一些优化,使得列出的表中,每个主机只出现一
次。我们可以使用:
cat /var/log/httpd/access_log | awk '{print $1}' | wc -l
3.当然,我们可以根据需要选择第三方提供日志分析工具甚至自己开发一些日志分析工
具来满足我们的需求。常见的第三方日志分析工具有:WebTrends、Wusage、wwwstat、
http-analyze、pwebstats、WebStat Explorer、AccessWatch。
四、一些提示
日志一方面是我们分析网站的第一手资料,一方面却是吞噬大量磁盘空间的罪魁祸首。
所以别忘了定期转储或删除一些老的日志文件。
Apache 与代理服务器
代理服务器是位于客户和客户要访问的服务器之间的系统。当客户机使用 URL 请求
访问远程资源时,代理服务器接受该请求并取得该资源以满足客户机的请求。在通常情
况下,代理服务器是客户机的服务器,同时也是远程服务器的客户。
代理服务器可以在自己的缓冲区中存储被请求的内容,当这些信息再次被请求的时
候,代理服务器就无需再从远程服务器上取了,这样代理服务器就减轻了网络的瓶颈问
题。
Apache 可以配置成为代理服务器。
一、前向代理服务器和逆向代理服务器
1.前向代理服务器
前向代理服务器通常位于用户主机和要访问的远程网络之间。它从远程服务器取得所要
求的资源,然后返回给用户,同时存在磁盘上,以供下次使用。
在这种情况下,客户端的主机知道它们正在使用代理服务器,因为每个主机都必须配置
为使用代理服务器。
例如,必须告诉 WWW 浏览器使用代理服务器,它才能使用代理服务器。所有的远程请求
都通过代理服务器传输。
这类代理服务器也称为缓冲代理服务器。逆向服务器也可以缓冲数据,但它的作用愉好
与前向服务器相反。
2.逆向代理服务器
逆向代理服务器位于互联网资源前面,逆向服务器从原始服务器找到被请求的资源,并
反它返回给用户主机。
与前向代理服务器不同的是,逆向代理服务器的用户并不知道它们连接的是代理服务器
而不是资源服务器本身。其结构如下图所示:
二、配置代理服务器
为了允许 Apache 作为代理服务器,需要将 ProxyRequests 设为 On,然后根据你希
望代理服务器做什么而增加什么附加配置。无论你希望做什么,你所选的代理配置都应
该放入一个特殊?lt;Directory>容器中。
<Directory proxy:*>
…
</Directory>
实例一:将私有 IP 网连到互联网
假设私有网上只有一台计算机被分配了互联网上合法的 IP 地址,这台计算
机运行 Apache 代理服务器,ProxyRequest 设置为 On,并且不需要附加其他配置,所有
请求均可由这台代理服务器代理服务。
实例二:让 Apache 允当远程 WWW 站点的缓冲
第一步:将 ProxyRequest 设置为 On
第二步:创建配置如下:
<Directory proxy:*>
CacheRoot /www/cache
CacheSize 1024
CacheMaxExpire 24
</Directory>
这里的意思是设置 Cache 目录为/www/cache;大小为 1024KB,即 1MB;缓冲中的内容在
24 小时后失效。
实例三:建立镜像站点(其实这也就是所谓的逆向代理服务器)
第一步:将 ProxyRequest 设置为 On
第二步:创建配置如下:
<Directory proxy:*>
ProxyPass / www.mot.com /
CacheRoot /www/cache
CacheDefaultExpire 24
</Directory>
10.3 一些提示
代理服务器,我们将会在后面的章节中详细介绍,这里只是针对 Apache 的功能介绍的。
用 Apache 作代理服务器的性能并不高,效果并不好。不建议使用。
安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens
注意事项:
1.如果妳是用 Redhat based 的 Linux 的话,请执行 ntsysv 将 httpd 和 Mysql 不要
执行
2.将 DOWNLOAD 的档案放到相同的目录,再用 tar zxvf xxxxxxxx.tar.gz 来解压缩,
请依照要安装的软件进入适当的目录。
3.可以到 http://linuxnews.idv.tw/download/ 来下载所需的程序。
MySQL:
---------------------------------------------------------------
./configure --prefix=/usr/local/mysql --with-charset=big5
make
make install
cd scripts
./mysql_install_db
cd /usr/local/mysql/share/mysql/
chmod 611 mysql.server
./mysql.server start
#编辑 /etc/rc.d/rc.local 加入底下这行以便开机时自动执行 mysql
/usr/local/mysql/share/mysql/mysql.server start
imap:
---------------------------------------------------------------
make slx
cp ipopd/ipop*.* /usr/sbin
cp imapd/imapd /usr/sbin
cp c-client/c-client.a /usr/local/lib
#请确定你有 /usr/local/include 这个目录
cp c-client/rfc822.h /usr/local/include
cp c-client/mail.h /usr/local/include
cp c-client/linkage.h /usr/local/include
GD:
---------------------------------------------------------------
make
make install
Ldap:
---------------------------------------------------------------
./configure --prefix=/usr/local/ldap
make
make depend
cd tests
make
cd ..
make install
Apache:
---------------------------------------------------------------
./configure --prefix=/usr/local/apache
openssl:
---------------------------------------------------------------
./config
make
make test
make install
mod_ssl:
---------------------------------------------------------------
./configure --with-apache=../apache_1.3.19 --with-ssl=../openssl-0.9.6
--prefix=../apache_1.3.19
php:
---------------------------------------------------------------
./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.19
--enable-track-vars --with-gd=../gd-1.8.4 --with-imap=../imap-4.7c
--enable-ftp --with-ldap=/usr/local/ldap
make
make install
Apache:
---------------------------------------------------------------
./configure --prefix=/usr/local/apache
--activate-module=src/modules/php4/libphp4.a --enable-module=ssl
make
make certificate
#这时会问你一些问题,就是有关于加密的问题,最后要要求输入启动的密码,如果输入
密码的话以后启动 httpd 的时候会询问密码,若不输
#入密码的话启动就不会问了
#PS.启动 http
#要加密:apachectl startssl
#不加密:apachectl start
make install
修改 /etc/rc.d/rc.local 加入 /usr/local/apache/bin/apachectl start 来开机时
自动启动 Apache
再来就是修改 /usr/local/apache/conf/httpd.conf 的设定档,将 php 的支持加入
建立 Apache 站点的基本安全机制
对于 WWW 服务来说,在 WWW 服务器和 WWW 浏览器之间并不始终维持对话过程。办要 WWW
服务器完成对一个 URL 请求的服务,连接就断开了。
在这种情况下,在 WWW 上保证可以使用的唯一认证机制是由 HTTP 本身提供 的。在标准
的 Apache 服务器实现了这样的认证,它能控制哪些主机可能访问特定的站点或特点的站
点的一部分。
这种认证可以分为两种,一种是基于主机的的认证,另一种是基于用户名/口令的认证。
由于互联网上的决大多数用户的 IP 地址是动态获得的,所以基于主机的认证方式并不总
适用。所以在大多数情况下,传统的基于用户名/口令的认证方式更为现实。下面我们就
对这两种认证的实现做一简要的介绍。
1. 基于主机的认证方式
在种认证模式顾名思义,访问是用主机名或主机 IP 地址来控制的。支持这种认证方式的
是 Apache 的 mod_access 模块,这个模块缺省状态下是被安装了的。该模块用以下几种
Apache 命令来提供访问控制功能。
allow 命令
语法:allow from host1 host2 host3 ...
这个命令定义了允许访问站点或目录的主机清单。主机清单可以用以下几
种形式表示:
ALL:代表所有主机;
主机的全域名,如:www.mot.com;
主机的部分域名,如:.mot.com;
完整的 IP 地址,如:202.98.2.32;
部分 IP 地址,如:202.98
网络地址/网络掩码对,如:202.98.0.0/255.255.0.0
网络地址/nn(CIDR 定义),如:202.98.0.1/16
deny 命令
语法:deny from host1 host2 host3 ...
这个命令定义了禁止访问站点或目录的主机清单,其他与 allow 命令相似。
order 命令
语法:order deny,allow | allow,deny
这个命令定义评价 allow 和 deny 命令的先后顺序。
例如:
<Directory /home/httpd/html>
order deny,allow
deny from www.mot.com
allow all
</Directory>
这组命令设置了禁止 www.mot.com 访问/home/httpd/html 目录下的文件。
请大家注意,顺序是先 deny 后 allow,如果是:order allow,deny 那么,先允许所有
的主机访问,然后再禁止,这样是无效的,所有主机仍然能够访问。
2. 基于用户名/口令的认证方式
这种认证方式其实相当简单,当 WWW 浏览器请求经此认证模式保护的 URL
时,将会出现一个对话框,要求用户键入用户名和口令。用户输入后,传给 WWW 服务器,
WWW 服务器验证它的正确性,如果正确,返回页面,否则返回 401 错误。要说明的一点
是,这种认证模式是基本的,并不能用于安全性要求极高的场合。
Apache 中有许多模块可以支持这种认证方式,下面我们就介绍一下最基本、最标准的
mod_auth 模块。正如前面提到的一样,mod_auth 模块使用存储在文本文件中的用户名、
组名和口令来实现认证。这种方法非常适合处理少量用户,它能工作得很好。如果你需
要对大量的用户,如数以千计的用户做认证时,这种方法的性能将急剧下降到不可忍受,
所以当这种情况下,就需要考虑使用 mod_dbm 模块或 mod_mysql 模块来获得更好的性能。
实例一:需要用户名和口令的访问控制
下面我们就一起来看一下如何建立需要用户名/口令才能进行访问的目录。
基本情况: www.xxx.com
的站点有设置为:
DocumentRoot /home/httpd/html
AccessFileName .htaccess
AllowOverride All
需求:限制/home/httpd/html/backup/目录的访问,只允许用户"super"以口令"fill-06"
访问此目录。
实现步骤:
使用 htpasswd 建立用户文件
htpasswd -c /home/httpd/secr/.htpasswd super
此程序会询问用户"super"的口令,你输入"fill-06",两次生效。
建立.htaccess 文件
用 vi 在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
以下几行:
AuthName My Friend Only (注:这个名字是任取的)
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
require user super
设置文件权限,确保 Apache 用户有读的权限
这样就完成了设置工作,你可以试一试效果了。
实例二:允许一组用户访问一个目录
假设,现在 www.xxx.com 想让 myfriend 组中的 mf1 与 mf2 两个用户分别能
使用口令"mf001-1""mf002-2"访问/home/httpd/html/backup/目录。
实现步骤:
使用 htpasswd 建立用户文件
htpasswd -c /home/httpd/secr/.htpasswd mf1
htpasswd -c /home/httpd/secr/.htpasswd mf2
建立组文件
用 vi/home/httpd/secr/目录下建立一个文件.htgroup,写入:
myfriend:mf1 mf2
建立.htaccess 文件
用 vi 在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入
以下几行:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
配置工作到此结束,试一试吧!
实例三:混合使用基于主机与基于用户名/口令的认证方式
如果你除了只允许让 mf1 与 mf2 两个用户访问外,还想禁止除 www.mot.com
外的主机访问这个目录的话,就将/home/httpd/html/backup/.htaccess 修改成为:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
order deny,allow
deny from all
allow from www.mot.com
相关阅读 更多 +