Apache配置6 - 配置CGI

255 篇文章 0 订阅

 

Apache配置6 - 配置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 


@为用户提供的两种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程序。 

2)使用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。 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值