由 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/
由 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>容器中。
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<br</inetd的进程id>