Linux Apache Web 服务器终极教程

由 txkss 在 11-16-2002 13:07 发表:

Linux Apache Web 服务器终极教程

Linux Apache Web 服务器终极教程

http://61.132.47.12/work/RedHat-lin...BD%CC%B3%CC.htm


由 luoruanti 在 11-17-2002 01:41 发表:

看不到,我想要!

打不开呀怎么办,我想到这份资料


由 eTony 在 11-17-2002 08:32 发表:


Object not found!

The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.

If you think this is a server error, please contact the webmaster

Error 404

61.132.47.12

Sun Nov 17 08:31:39 2002

Apache/2.0.40 (Red Hat Linux)


Seeking Freedom,pure Freedom!

http://211.92.88.40/~tony/

http://etony.blogone.net/


由 jsnp 在 11-17-2002 15:57 发表:


Linux Apache Web 服务器终极教程

APACH系统介绍

根据著名的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

   1<inetd的进程id>   
   2  
   3  
   4  
   5在RedHat Linux中,默认是采用inetd服务器来运行Apache,所以只要你在安装时选择了httpd,以上工作在安装时就已经代你完成了。   
   6  
   7  
   8  
   9二、其它配置选项   
  10  
  11  
  12  
  13Server Admin命令,用来设置WEB管理员的E-Mail地址。这个地址会出现在系统连接出错的时候,以便访问者能够将情况及时地告知WEB管理员。   
  14  
  15  
  16  
  17命令格式: Server Admin [you E-Mail address]   
  18  
  19  
  20  
  21例:Server Admin [email protected]   
  22  
  23  
  24  
  25ErrorLog命令,用来指定错误记录文件名称和路径。   
  26  
  27  
  28  
  29命令格式: ErrorLog [log filename]   
  30  
  31  
  32  
  33例:ErrorLog /var/httpd/error.log   
  34  
  35  
  36  
  37Timeout命令,只要客户端超过这里设定的秒数还没有完成一个请求的话,服务端将终止这次请求服务。如果网络速度较慢的话,建议在此设置较大的数值。以给客户端更多机会。   
  38  
  39  
  40  
  41命令格式: Timeout [second]   
  42  
  43  
  44  
  45例:Timeout 120   
  46  
  47  
  48  
  49ServerRoot命令,它指定在何处保存服务器的配置、错误及日志文件。   
  50  
  51  
  52  
  53命令格式: ServerRoot [fully qualified path name]   
  54  
  55  
  56  
  57例:ServerRoot /etc/httpd   
  58  
  59  
  60  
  61ServerName命令,它配置服务器的Internet主机名   
  62  
  63  
  64  
  65命令格式: ServerName [host name]   
  66  
  67  
  68  
  69例:ServerName www.xxx.com   
  70  
  71  
  72  
  73srm.conf   
  74  
  75  
  76  
  77srm.conf是资源配置文件,用它来告诉服务器你想在WWW站点上提供什么资源以及在哪里和如何提供们。   
  78  
  79  
  80  
  81DocumentRoot命令,用来指定主文档的地址。   
  82  
  83  
  84  
  85命令格式: DocumentRoot [Path]   
  86  
  87  
  88  
  89例:DocumentRoot /home/httpd/html   
  90  
  91  
  92  
  93UserDir命令,用来指定个人主页的位置。如果你有一个用户test,那么它主目录是"/home/test",当客户端输入"http://yourdomain/~test",系统就会到对应的目录"/home/test/UserDir/"中去寻找。其中"UserDir"就是在UserDir命令中设置的指定目录。   
  94  
  95  
  96  
  97命令格式: UserDir [Path]   
  98  
  99  
 100  
 101例: UserDir Public_html   
 102  
 103  
 104  
 105DirectoryIndex命令,用来声明首页文件名称。一般地,我们使用"index.html"或"index.htm"作为首页的文件名。如果这样设置后,那么客户端发出WEB服务请求时,将首先调入的主页是在指定目录下文?quot;index.html"或"index.htm"。   
 106  
 107  
 108  
 109命令格式: DirecotryIndex [filename]   
 110  
 111  
 112  
 113例:DirecotryIndex index.html index.htm   
 114  
 115  
 116  
 117ScriptAlias命令,为脚本程序目录起个别名,具体可见4.7小节。   
 118  
 119  
 120  
 121命令格式: ScriptAlias [/alias/] [fullly qualified path for script directory]   
 122  
 123  
 124  
 125例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin   
 126  
 127  
 128  
 129access.conf的配置   
 130  
 131  
 132  
 133access.conf文件用来设置WWW站点上诸如文件、目录和脚本项目的访问权限。该文件的第一段非注释部分如下:   
 134  
 135  
 136  
 137<directory home="" html="" httpd="">   
 138  
 139  
 140  
 141Option Indexes Includes ExecCGI FollowSymLink   
 142  
 143  
 144  
 145AllowOverride None   
 146  
 147  
 148  
 149Order allow , deny   
 150  
 151  
 152  
 153allow from all   
 154  
 155  
 156  
 157</directory>   
 158  
 159  
 160  
 161大家应该注意到,这一个部分是以<directory home="" html="" httpd="">开始,以</directory>结束的。这表示在其中间的部分都是针对指定目录"/home/httpd/html"而言的。   
 162  
 163  
 164  
 1651.Option命令有很多的参数,各个参数的意义如下所示:   
 166  
 167  
 168  
 169All 准许以下所有功能(MultiViews除外);   
 170  
 171  
 172  
 173MultiViews 准许内容协商的Multiviews;   
 174  
 175  
 176  
 177Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择;   
 178  
 179  
 180  
 181IncludesNOEXEC 准许SSI(Server-side Includes),但不可使用#exec和#include功能;   
 182  
 183  
 184  
 185Includes 准许SSI;   
 186  
 187  
 188  
 189FollowSymLinks 准许符号链接到其他目录;   
 190  
 191  
 192  
 193ExecCGI 准许该目录下可以使用CGI。   
 194  
 195  
 196  
 1972.而AllowOverride命令则是用来决定是否准许在"access.conf"文件中设定的权限是否可以被在文件".htaccess"中设定的权限覆盖。它有两个参数:   
 198  
 199  
 200  
 201All 准许覆盖;   
 202  
 203  
 204  
 205None 不准许覆盖。   
 206  
 207  
 208  
 2093.Order命令:用来设定谁能从这个服务器取得控制。它也有两个参数:   
 210  
 211  
 212  
 213allow 可以取得控制;   
 214  
 215  
 216  
 217deny 禁止取得控制。   
 218  
 219  
 220  
 221现在我们一起来看看关于目录"/home/httpd/html"的设置的含义:它使得这个目录,如果不存在index.htm文件时,列出目录信息以供选择,准许SSI,允许执行CGI程序,开启了动态连接。它不允许再使用在文件".htaccess"中设定来覆盖这里所设置的权限。使所有的人都可以取得控制。   
 222  
 223  
 224  
 225该文件的第二段非注释部分如下:   
 226  
 227  
 228  
 229<directory cgi-bin="" home="" httpd="">   
 230  
 231  
 232  
 233Option ExecCGI   
 234  
 235  
 236  
 237AllowOverride None   
 238  
 239  
 240  
 241</directory>   
 242  
 243  
 244  
 245这个表示目录"/home/httpd/cgi"的设置为,当前目录下可以执行CGI程序。不允许再使用在文件".htaccess"中设定来覆盖这里所设置的权限。   
 246  
 247  
 248  
 249需要说明的是,不同的LINUX系统中,可以在这个文件中看到的信息不完全相同,但是根据这里给出的信息,大家可以参照命令的解释自行理解文件中的设置,以及根据自己的需要进行相应的修改。   
 250  
 251  
 252  
 2534.4 使新的配置生效   
 254  
 255  
 256  
 257在上面,我们可能已经根据新的需求更改了相应的配置选项,如果我们要使得这个新的配置立即生效。我们就必须重新启动WEB服务进程。在LINUX中,我们可以十分方便地使用命令行来使得WEB服务进程重启。   
 258  
 259  
 260  
 261/etc/rc.d/init.d/httpd restart   
 262  
 263  
 264  
 265五、为用户开辟个人主页空间   
 266  
 267  
 268  
 269如果我们利用了LINUX系统架设了一台WEB服务器,我们不仅可以存放公司的主页,而且还可以为公司的每一个员工提供一块个人主页的空间。   
 270  
 271  
 272  
 273首先,为需要个人主页空间的员工在LINUX上开设一个帐号。这样,它就拥有了一个用户主目录"/home/用户帐号名"。   
 274  
 275  
 276  
 277addusr 用户帐号名   
 278  
 279  
 280  
 281passwd 用户帐号名   
 282  
 283  
 284  
 285在用户主目录下建立一个目录"public_html",然后为其设置相应的权限。   
 286  
 287  
 288  
 289cd ~用户帐号名   
 290  
 291  
 292  
 293mkdir public_html   
 294  
 295  
 296  
 297chmod 755 public_html   
 298  
 299  
 300  
 301确认在srm.conf文件中的UserDir命令设置的是public_html目录。让员工将自己的个人主页上传到自己用户主目录下的public_html目录中。   
 302  
 303  
 304  
 305现在就可以使用"http://www.company.com/~用户帐号名"来访问员工的个人主页了。   
 306  
 307  
 308  
 309用Apache实现虚拟主机服务   
 310  
 311  
 312  
 313什么是虚拟主机服务   
 314  
 315  
 316  
 317所谓的虚拟主机服务就是指将一台机器虚拟成多台WEB服务器。举个例子来说,一家公司想从事提供主机代管服务,它为其它企业提供WEB服务。那么它肯定不是为每一家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚拟主机的形式,提供多个企业的WEB服务,虽然所有的WEB服务就是这台服务器提供的,但是让访问者看起来却是在不同的服务器上获得WEB服务一样。   
 318  
 319  
 320  
 321具体地说,就是,我们可以利用虚拟主机服务将两个不同公司www.company1.com与www.company2.com的主页内容都存放在同一台主机上。而访问者只需输入公司的域名就可以访问到它想得到的主页内容。 用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于名字的虚拟主机,下面我们分别介绍一下它们的实现方法。以便大家在具体的应用中能够选择最合适的实现方法。   
 322  
 323  
 324  
 325设置实现基于IP地址的虚拟主机服务实现前提   
 326  
 327  
 328  
 329这种方式需要在机器上设置IP别名,也就是在一台机器的网卡上绑定多个IP地址去为多个虚拟主机服务。而且要使用这项功能还要确定在你的LINUX内核中必须支持IP别名的设置,否则你还必须重新编译内核。   
 330  
 331  
 332  
 333下面举一个拥有两个虚拟主机的服务设置,以供参考。   
 334  
 335  
 336  
 3372.配置步骤   
 338  
 339  
 340  
 341假设,我们用来实现虚拟主机服务的机器,首先已经为自己提供了WEB服务,现在将为新的一家公司www.company1.com提供虚拟主机服务。   
 342  
 343  
 344  
 345规划IP地址:为虚拟主机申请新的IP地址。(假设本机IP地址为202.101.2.1)   
 346  
 347  
 348  
 349www.company1.com 202.101.2.2   
 350  
 351  
 352  
 3532) 让ISP作好相应的域名解析工作。   
 354  
 355  
 356  
 3573) 为网卡设置IP别名:   
 358  
 359  
 360  
 361/sbin/ifconfig eth0:0 202.101.2.2 netmask 255.255.255.0   
 362  
 363  
 364  
 3654) 重新设置"/etc/httpd/conf/httpd.conf",在文件中加入:   
 366  
 367  
 368  
 369<virtualhost 202.101.2.2="">   
 370  
 371  
 372  
 373ServerAdmin [email protected]   
 374  
 375  
 376  
 377DocumentRoot /home/httpd/www.company1.com   
 378  
 379  
 380  
 381ServerName www.company1.com   
 382  
 383  
 384  
 385ErrorLog /var/log/httpd/www.company1.com/error.log   
 386  
 387  
 388  
 389</virtualhost>   
 390  
 391  
 392  
 3935)建立相应的目录。   
 394  
 395  
 396  
 397mkdir /home/httpd/www.company1.com   
 398  
 399  
 400  
 401mkdir /var/log/httpd/www.company1.com/error.log   
 402  
 403  
 404  
 4056)将相应的主页内容存放在相应的目录中即可。   
 406  
 407  
 408  
 4093.不利因素   
 410  
 411  
 412  
 413这种虚拟主机的实现方法有一个严重的不足,那就是,每增加一个虚拟主机,就必须增加一个IP地址。而由于IP地址空间已经十分紧张,所以通常情况下是无法取得这么多的IP地址的。而且从某种意义上说,这也是一种IP地址浪费。设置实现基于名字的虚拟主机服务而基于名字的虚拟主机服务,是比较适合使用的一种方案。因为它不需要更多的IP地址,而且配置简单,无须什么特殊的软硬件支持。现代的浏览器大都支持这种虚拟主机的实现方法。当然,这也就是指一些早期的客户端浏览器也许不支持这种虚拟主机的实现方法。   
 414  
 415  
 416  
 417正是以上原因,我们没有理由不使用基于名字的虚拟主机服务而使用基于IP地址的虚拟主机服务。配置基于名字的虚拟主机服务需要修改配置文件?quot;/etc/httpd/conf/httpd.conf",在这个配置文件中增加以下内容。   
 418  
 419  
 420  
 421NameVirtualHost 202.101.2.1   
 422  
 423  
 424  
 425<virtualhost 202.101.2.1="">   
 426  
 427  
 428  
 429ServerAdmin [email protected]   
 430  
 431  
 432  
 433DocumentRoot /home/httpd/www.company1.com   
 434  
 435  
 436  
 437ServerName www.company1.com   
 438  
 439  
 440  
 441ErrorLog /var/log/httpd/www.company1.com/error.log   
 442  
 443  
 444  
 445</virtualhost>
 446<virtualhost 202.101.2.1="">   
 447  
 448  
 449  
 450ServerAdmin [email protected]   
 451  
 452  
 453  
 454DocumentRoot /home/httpd/www.company2.com   
 455  
 456  
 457  
 458ServerName www.company2.com   
 459  
 460  
 461  
 462ErrorLog /var/log/httpd/www.company2.com/error.log   
 463  
 464  
 465  
 466</virtualhost>   
 467  
 468  
 469  
 470也就是在基于IP地址的配置基础上增加一句:NameVirtualHost 202.101.2.1而已。在本例中,为了体现只需要增加一次,所以特别地设置了两个虚拟主机服务。   
 471  
 472  
 473  
 474最后也是建立相应的目录,将主页内容放到相应的目录中去就可以了。   
 475  
 476  
 477  
 478配置CGI   
 479  
 480  
 481  
 4821\. 什么是CGI   
 483  
 484  
 485  
 486CGI是独立于语言的网关接口规范,它实际上可以用任何广泛流行的应用程序开发语言来实现,包括C、C++、Perl、Shell脚本甚至Java。   
 487  
 488  
 489  
 490WEB服务器从客户端得到某个URL,它告诉WEB服务器,必须运行一个CGI外部应用程序。那么WEB服务器启动这一应用程序,等待它完成并返回输出结果。最后,它将此应用程序的输出结果传输给另一端的WEB客户。   
 491  
 492  
 493  
 4942\. 为CGI配置Apache   
 495  
 496  
 497  
 498那么如何使Apache能处理CGI请求呢?我们必须通过相应的配置过程告知Apache在哪里存储CGI程序,指明CGI程序的扩展等,以下我们逐一介绍一下设置的内容与步骤。   
 499  
 500  
 501  
 502创建存储CGI程序的目录   
 503  
 504  
 505  
 506创建集中的CGI程序目录只是建立CGI环境的开始。如果要考虑提高安全   
 507  
 508  
 509  
 510性的话,应将集中的CGI程序目录保存在DocumnetRoot目录外,使得访问者不能直接访问CGI程序。 第一步:在DocumentRoot目录外创建一个目录,然后将所有的CGI程序都集中存放在这个目录下。例如,你可创建一个/home/httpd/public/apps的目录作为CGI程序的大本营。   
 511  
 512  
 513  
 514第二步:为CGI程序目录创建别名,也就是编辑配置文件httpd.conf,加入:   
 515  
 516  
 517  
 518ScriptAlias /cgi-bin/ /home/httpd/public/apps   
 519  
 520  
 521  
 522这样做后,当客户访问www.xxx.com/cgi-bin/li.cgi时,WEB服务器就会自动执行WEB服务器上的/home/httpd/public/apps/li.cgi文件。   
 523  
 524  
 525  
 526第三步:为CGI目录设置合适的权限,一般是只允许Apache有读取和执行的权限但没有写的权限。   
 527  
 528  
 529  
 530允许用户访问cgi-bin   
 531  
 532  
 533  
 534我们已经在4.5小节中介绍了如何给用户开辟个人主页空间,但如果你的   
 535  
 536  
 537  
 538用户需要使他的主页更具有活力,往往会向你申请cgi-bin访问服务。下面我们就介绍一个Apache服务器为用户提供的两种cgi-bin访问方法。   
 539  
 540  
 541  
 5421)使用Directory或DirectoryMatch容器   
 543  
 544  
 545  
 546当在配置文件srm.conf中用UserDir命令被赋值为目录名称时,Apache就   
 547  
 548  
 549  
 550把它作为用户WWW站点的顶层目录。例如:   
 551  
 552  
 553  
 554UserDir Public_html   
 555  
 556  
 557  
 558当Apache接到www.xxx.com/~user的请求,就到/home/user/Public_html取出主页发送给客户。   
 559  
 560  
 561  
 562如果要为每个用户添加CGI支持就在Apache的配置文件access.conf中添加下列配置:   
 563  
 564  
 565  
 566<directorymatch "="" [a-z]+="" cgi-bin"="" home="" public_html="">   
 567  
 568  
 569  
 570Options ExecCGI   
 571  
 572  
 573  
 574AddHandler cgi-script .cgi .pl   
 575  
 576  
 577  
 578</directorymatch>   
 579  
 580  
 581  
 582注:将DirectoryMatch换成Directory亦可   
 583  
 584  
 585  
 586在这种方法中,Apache服务器将www.xxx.com/~user/cgi-bin请求翻译成为了/home/user/Public_html/cgi-bin/,并允许执行任何带有正确扩展名(.cgi或.pl)的CGI程序。   
 587  
 588  
 589  
 590使用ScriptAliasMatch命令   
 591  
 592  
 593  
 594通过使用ScriptAliasMatch命令,也可以为每个用户添加CGI支持。例如:   
 595  
 596  
 597  
 598ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2   
 599  
 600  
 601  
 602这个命令将用户名与$1相匹配,其中$1与~([a-z]+)相等。将/cgi-bin/后面的任何内容与$2相匹配,其中$2与(.*)相等。   
 603  
 604  
 605  
 606这个设置也就实现了将www.xxx.com/~user/cgi-bin/xxx.cgi请求解释为:   
 607  
 608  
 609  
 610/home/user/Public_html/cgi-bin/xxx.cgi   
 611  
 612  
 613  
 614那么大家想一想,如果你想将这个请求解释为:   
 615  
 616  
 617  
 618/home/httpd/public/apps/xxx.cgi   
 619  
 620  
 621  
 622该如何设置呢?对,应该是:   
 623  
 624  
 625  
 626ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2   
 627  
 628  
 629  
 6303\. Apache为CGI提供的环境变量   
 631  
 632  
 633  
 634Apache服务器提供了许多环境变量可以用于CGI程序的编写,了解它们也一定有助于写出充分利用Apache的CGI程序,所以在此也对此作一简单介绍。   
 635  
 636  
 637  
 638服务器变量   
 639  
 640  
 641  
 642服务器变量由Apache设置用来通知CGI程序有关Apache的情况。通过使   
 643  
 644  
 645  
 646用这些变量,CGI程序能确定有关服务器的不同信息:Apache的版本,管理员的E-Mail地址等。   
 647  
 648  
 649  
 650SERVER_SOFTWARE   
 651  
 652  
 653  
 654这个变量是WWW服务器Apache的版本号,它的值形如:Apache/Version,如Apache/1.3;   
 655  
 656  
 657  
 658GATEWAY_INTERFACE   
 659  
 660  
 661  
 662这个变量的值是当前CGI规范的版本号,其值形如:CGI/1.1;   
 663  
 664  
 665  
 666SERVER_ADMIN   
 667  
 668  
 669  
 670如果在httpd.conf文件中有设置站点管理员的e-mail地址的话,这个变量就会存放着这个e-mail地址;   
 671  
 672  
 673  
 674DOCUMENT_ROOT   
 675  
 676  
 677  
 678这个变量存放在是被访问的WWW站点的DocumentRoot命令指定的值。   
 679  
 680  
 681  
 682客户请求变量   
 683  
 684  
 685  
 686Apache提供的有关客户请求方的环境变量有许多,以下只是有选择性地介绍一些最常见的。   
 687  
 688  
 689  
 690SERVER_NAME   
 691  
 692  
 693  
 694此变量可以告诉CGI程序它访问的是哪一个主机。这个值可以是IP地址也可以是完整的主机名;   
 695  
 696  
 697  
 698HTTP_ACCEPT   
 699  
 700  
 701  
 702此变量被赋值为客户所能接受的MIME类型的列表,如:HTTP_ACCEPT=image/gif;   
 703  
 704  
 705  
 706HTTP_ACCEPT_CHARSET   
 707  
 708  
 709  
 710此变量被赋值为客户所能接受的字符集,如:   
 711  
 712  
 713  
 714HTTP_ACCEPT_CHARASET=iso-8859-1.,*,utf-8;   
 715  
 716  
 717  
 718HTTP_ACCEPT_LANGUAGE   
 719  
 720  
 721  
 722此变量被赋值为客户所能接受的语言,如:HTTP_ACCEPT_LANGUAGE=en;   
 723  
 724  
 725  
 726HTTP_ACCEPT_AGENT   
 727  
 728  
 729  
 730这个变量指定发出请求的系统正在运行的浏览器类型和操作系统;   
 731  
 732  
 733  
 734HTTP_PORT:服务端口;   
 735  
 736  
 737  
 738REMOTE_HOST:客户端的IP地址或IP名称信息;   
 739  
 740  
 741  
 742REMOTE_PORT:客户端的端口号;   
 743  
 744  
 745  
 7464\. 一点提示   
 747  
 748  
 749  
 750若干年来,通过网关接口(CGI)已成为服务器端应用程序开发的事实标准。但随着时间的推移,发现在沉重的CGI负担下许多WWW服务器系统的表现不尽人意。这是因为CGI规范存在瓶颈问题:每当客户系统请求CGI应用程序时,WWW服务器就必须启动新的CGI进程,直到完成任务后结束进程。这在负载不高时,会工作正常。但是,在高负载时,繁多的进程将成为性能的瓶颈问题。   
 751  
 752  
 753  
 754所以现在开始出现新的标准来弥补这一不足,其中FastCGI是很有前途的一种新的开放式标准。   
 755  
 756  
 757  
 758你可以在Apache中通过添加mod_fastcgi.c模块来支持FastCGI。   
 759  
 760  
 761  
 762解读Apache日志   
 763  
 764  
 765  
 766当你一步步地看到这里的时候,相信你的WWW站点已经建好,并且已经在Internet上展现出来了。这时你可能就会关心谁造访过你的站点,或者想知道你的Apache服务器现在的运行状态与性能如何。下面我们一起通过解读Apache的日志来实现这个伟大的愿望。   
 767  
 768  
 769  
 770一、盯着Apache服务器   
 771  
 772  
 773  
 774Apache允许通过WWW监视服务器的配置信息与运行状态。   
 775  
 776  
 777  
 7781.观看配置信息   
 779  
 780  
 781  
 782如果你的Apache象缺省配置一样加入了mod_info模块的话,你就可以通过访问http://localhost/server-info查看服务器信息。   
 783  
 784  
 785  
 7862.使用状态页   
 787  
 788  
 789  
 790如果你的Apache象缺省配置一样加入了mod_status模块的话,你就可以   
 791  
 792  
 793  
 794通过访问http://localhost/apache-status查看服务器的运行状态信息,其中包括:   
 795  
 796  
 797  
 798¨ 服务器系统的当前时间;   
 799  
 800  
 801  
 802¨ 服务器最近一次重启时间;   
 803  
 804  
 805  
 806¨ 服务器启动后的运行时间;   
 807  
 808  
 809  
 810¨ 到目前为止服务的访问总数;   
 811  
 812  
 813  
 814¨ 到目前为止传输的字节总数;   
 815  
 816  
 817  
 818¨ 服务请求的子进程数;   
 819  
 820  
 821  
 822¨ 空闲子进程数;   
 823  
 824  
 825  
 826¨ 每个进程状态、子进程服务的请求数以及该子进程传输的字节总数;   
 827  
 828  
 829  
 830¨ 每秒平均请求数、每秒传输的字节数、每次请求平均传输字节数;   
 831  
 832  
 833  
 834¨ 目前每个子进程CPU占用及Apache的总的CPU占用率;   
 835  
 836  
 837  
 838¨ 当前主机及处理的请求。   
 839  
 840  
 841  
 842二、什么是日志文件   
 843  
 844  
 845  
 846日志文件是Apache工作的记录,Apache包括了mod_log_config模块,它用来记录日志。在缺省情况下,它用通用日志格式CLF规范来写。CLF日志文件内对每个请求均有一个单独行,形如:host ident anthuser date request status bytes   
 847  
 848  
 849  
 850其含义如下:   
 851  
 852  
 853  
 854¨ host客户端主机的全称域名或IP地址;   
 855  
 856  
 857  
 858¨ ident存放客户端报告的识别信息;   
 859  
 860  
 861  
 862¨ authuser如果是基于用户名认证的话,值为用户名;   
 863  
 864  
 865  
 866¨ date请求的日期与时间;   
 867  
 868  
 869  
 870¨ request客户端的请求行;   
 871  
 872  
 873  
 874¨ status返回到客户端的三们数字的HTTP状态码;   
 875  
 876  
 877  
 878¨ bytes除去HTTP头标外,返回给客户端的字节数。   
 879  
 880  
 881  
 882三、分析日志文件   
 883  
 884  
 885  
 886有了日志文件后,我们可以利用UNIX的一些工具和一此专门的日志分析工具对日志文件进行分析。   
 887  
 888  
 889  
 890实例一:列出访问过本网站的主机名或IP:   
 891  
 892  
 893  
 894对于这个需求,我们可以通过一个Unix的一个脚本语句来完成:   
 895  
 896  
 897  
 898cat /var/log/httpd/access_log | awk '{print $1}'   
 899  
 900  
 901  
 902用上面的方法虽然可以得到访问过本网站的主机名或IP,但是由于有些是多次访问的,我们希望在上面得到的结果的基础上做一些优化,使得列出的表中,每个主机只出现一次。我们可以使用:   
 903  
 904  
 905  
 906cat /var/log/httpd/access_log | awk '{print $1}' | wc -l   
 907  
 908  
 909  
 9103.当然,我们可以根据需要选择第三方提供日志分析工具甚至自己开发一些日志分析工具来满足我们的需求。常见的第三方日志分析工具有:WebTrends、Wusage、wwwstat、http-analyze、pwebstats、WebStat Explorer、AccessWatch。   
 911  
 912  
 913  
 914四、一些提示   
 915  
 916  
 917  
 918日志一方面是我们分析网站的第一手资料,一方面却是吞噬大量磁盘空间的罪魁祸首。所以别忘了定期转储或删除一些老的日志文件。   
 919  
 920  
 921  
 922Apache与代理服务器   
 923  
 924  
 925  
 926代理服务器是位于客户和客户要访问的服务器之间的系统。当客户机使用URL请求访问远程资源时,代理服务器接受该请求并取得该资源以满足客户机的请求。在通常情况下,代理服务器是客户机的服务器,同时也是远程服务器的客户。   
 927  
 928  
 929  
 930代理服务器可以在自己的缓冲区中存储被请求的内容,当这些信息再次被请求的时候,代理服务器就无需再从远程服务器上取了,这样代理服务器就减轻了网络的瓶颈问题。   
 931  
 932  
 933  
 934Apache可以配置成为代理服务器。   
 935  
 936  
 937  
 938一、前向代理服务器和逆向代理服务器   
 939  
 940  
 941  
 9421.前向代理服务器   
 943  
 944  
 945  
 946前向代理服务器通常位于用户主机和要访问的远程网络之间。它从远程服务器取得所要求的资源,然后返回给用户,同时存在磁盘上,以供下次使用。   
 947  
 948  
 949  
 950在这种情况下,客户端的主机知道它们正在使用代理服务器,因为每个主机都必须配置为使用代理服务器。   
 951  
 952  
 953  
 954例如,必须告诉WWW浏览器使用代理服务器,它才能使用代理服务器。所有的远程请求都通过代理服务器传输。   
 955  
 956  
 957  
 958这类代理服务器也称为缓冲代理服务器。逆向服务器也可以缓冲数据,但它的作用愉好与前向服务器相反。   
 959  
 960  
 961  
 9622.逆向代理服务器   
 963  
 964  
 965  
 966逆向代理服务器位于互联网资源前面,逆向服务器从原始服务器找到被请求的资源,并反它返回给用户主机。   
 967  
 968  
 969  
 970与前向代理服务器不同的是,逆向代理服务器的用户并不知道它们连接的是代理服务器而不是资源服务器本身。其结构如下图所示:   
 971  
 972  
 973  
 974二、配置代理服务器   
 975  
 976  
 977  
 978为了允许Apache作为代理服务器,需要将ProxyRequests设为On,然后根据你希望代理服务器做什么而增加什么附加配置。无论你希望做什么,你所选的代理配置都应该放入一个特殊?lt;Directory&gt;容器中。   
 979  
 980  
 981  
 982<directory proxy:*="">   
 983  
 984  
 985  
 986 987  
 988  
 989  
 990</directory>   
 991  
 992  
 993  
 994实例一:将私有IP网连到互联网   
 995  
 996  
 997  
 998假设私有网上只有一台计算机被分配了互联网上合法的IP地址,这台计算   
 999  
1000  
1001  
1002机运行Apache代理服务器,ProxyRequest设置为On,并且不需要附加其他配置,所有请求均可由这台代理服务器代理服务。   
1003  
1004  
1005  
1006实例二:让Apache允当远程WWW站点的缓冲   
1007  
1008  
1009  
1010第一步:将ProxyRequest设置为On   
1011  
1012  
1013  
1014第二步:创建配置如下:   
1015  
1016  
1017  
1018<directory proxy:*="">   
1019  
1020  
1021  
1022CacheRoot /www/cache   
1023  
1024  
1025  
1026CacheSize 1024   
1027  
1028  
1029  
1030CacheMaxExpire 24   
1031  
1032  
1033  
1034</directory>   
1035  
1036  
1037  
1038这里的意思是设置Cache目录为/www/cache;大小为1024KB,即1MB;缓冲中的内容在24小时后失效。   
1039  
1040  
1041  
1042实例三:建立镜像站点(其实这也就是所谓的逆向代理服务器)   
1043  
1044  
1045  
1046第一步:将ProxyRequest设置为On   
1047  
1048  
1049  
1050第二步:创建配置如下:   
1051  
1052  
1053  
1054<directory proxy:*="">   
1055  
1056  
1057  
1058ProxyPass / www.mot.com /   
1059  
1060  
1061  
1062CacheRoot /www/cache   
1063  
1064  
1065  
1066CacheDefaultExpire 24   
1067  
1068  
1069  
1070</directory>   
1071  
1072  
1073  
107410.3 一些提示   
1075  
1076  
1077  
1078代理服务器,我们将会在后面的章节中详细介绍,这里只是针对Apache的功能介绍的。用Apache作代理服务器的性能并不高,效果并不好。不建议使用。   
1079  
1080  
1081  
1082安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens   
1083  
1084  
1085  
1086注意事项:   
1087  
1088  
1089  
10901.如果妳是用 Redhat based 的 Linux 的话,请执行 ntsysv 将 httpd 和 Mysql 不要执行   
1091  
1092  
1093  
10942.将 DOWNLOAD 的档案放到相同的目录,再用 tar zxvf xxxxxxxx.tar.gz 来解压缩,请依照要安装的软件进入适当的目录。   
1095  
1096  
1097  
10983.可以到 http://linuxnews.idv.tw/download/ 来下载所需的程序。   
1099  
1100  
1101  
1102MySQL:   
1103  
1104  
1105  
1106\---------------------------------------------------------------   
1107  
1108  
1109  
1110./configure --prefix=/usr/local/mysql --with-charset=big5   
1111  
1112  
1113  
1114make   
1115  
1116  
1117  
1118make install   
1119  
1120  
1121  
1122cd scripts   
1123  
1124  
1125  
1126./mysql_install_db   
1127  
1128  
1129  
1130cd /usr/local/mysql/share/mysql/   
1131  
1132  
1133  
1134chmod 611 mysql.server   
1135  
1136  
1137  
1138./mysql.server start   
1139  
1140  
1141  
1142#编辑 /etc/rc.d/rc.local 加入底下这行以便开机时自动执行 mysql&lt;br</inetd的进程id>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus