APACHE系统介绍
根据著名的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的最新版。而几乎所有的Linux发行版中均包含有Apache软件包你也可以直接使用它。
需要注意的是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 admin@xxx.com
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"而言的。
1Option命令有很多的参数各个参数的意义如下所示
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 不准许覆盖。
3Order命令用来设定谁能从这个服务器取得控制。它也有两个参数
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.comwww.company2.com的主页内容都存放在同一台主机上。而访问者只需输入公司的域名就可以访问到它想得到的主页内容。 用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 webmaster@yourdomain.com
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 webmaster@yourdomain.com
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 webmaster@yourdomain.com
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服务器就会自动执行WEB服务器上的/home/httpd/public/apps/li.cgi文件。
第三步为CGI目录设置合适的权限一般是只允许Apache有读取和执行的权限但没有写的权限。
允许用户访问cgi-bin
我们已经在4.5小节中介绍了如何给用户开辟个人主页空间但如果你的
用户需要使他的主页更具有活力往往会向你申请cgi-bin访问服务。下面我们就介绍一个Apache服务器为用户提供的两种cgi-bin访问方法。
1使用Directory或DirectoryMatch容器
当在配置文件srm.conf中用UserDir命令被赋值为目录名称时Apache就
把它作为用户WWW站点的顶层目录。例如
UserDir Public_html
当Apachewww.xxx.com/~user的请求就到/home/user/Public_html取出主页发送给客户。
如果要为每个用户添加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请求翻译成为了/home/user/Public_html/cgi-bin/并允许执行任何带有正确扩展名(.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监视服务器的配置信息与运行状态。
观看配置信息
如果你的Apache象缺省配置一样加入了mod_info模块的话你就可以通过访问http://localhost/server-info查看服务器信息。
2.使用状态页
如果你的Apache象缺省配置一样加入了mod_status模块的话你就可以
通过访问http://localhost/apache-status查看服务器的运行状态信息其中包括
¨ 服务器系统的当前时间
¨ 服务器最近一次重启时间
¨ 服务器启动后的运行时间
¨ 到目前为止服务的访问总数
¨ 到目前为止传输的字节总数
¨ 服务请求的子进程数
¨ 空闲子进程数
¨ 每个进程状态、子进程服务的请求数以及该子进程传输的字节总数
¨ 每秒平均请求数、每秒传输的字节数、每次请求平均传输字节数
¨ 目前每个子进程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