1.
通用网关接口
CGI
简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
通用网关接口
CGI
是一个信息服务器主机对外信息服务的标准接口。
CGI
接收用户的要求,
然后让服务器完成请求,并将执行结果返回给用户。
CGI
接口是为了提供在超文本
HTML
的文件编写时,可以结合其他外部的程序语言,让使用
者通过浏览器将使用者的数据输入到文件里,然后经服务器转呈现于其他用户来观赏或记录至
服务器主机上的数据库里。
CGI
可以通过
C
、
C++
、
Perl
、
Shell
脚本语言、
Jave
来实现。后面的一些具体技术从某种意义
上来说也是一种
CGI
程序。
2.
配置
Apache
支持
CGI
如何使
Apache
能处理
CGI
请求?必须通过相应的配置过程告知
Apache
在哪里存储
CGI
程序,
指明
CGI
程序的扩展等,以下我们逐一介绍设置的内容与步骤。
(1)
创建存储
CGI
程序的目录
创建集中的
CGI
程序目录只是建立
CGI
环境的开始。如果要考虑提高安全性,应将集中的
CGI
程序目录保存在
DocumnentRoot
目录外,使访问者不能直接访问
CGI
程序。
1)
在
DocumentRoot
目录外创建一个目录,然后将所有的
CGI
程序都集中存放在这个目录下。
例如,可创建一个
/home/httpd/public/apps
的目录作为
CGI
程序的大本营。
2)
为
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
文件。
3)
为
CGI
目录设置合适的权限,一般是只允许
Apache
有读取和执行的权限但没有写的权限。
(2)
允许用户访问
cgi-bin
如果用户需要使他的主页更具有活力,往往
会向你申请
cgi-bin
访问服务。下面介绍
Apache
服务器为用户提供的两种
cgi-bin
访问方法。
a)
使用
Directory
或
DirectoryMatch
容器
当在配置文件
srm.conf
中使用
UserDir
命令定义一个目录时,
Apache
会把该目录作为用户
WWW
站点的顶层目录。例如:
UserDir
Public_html
当 Apache 接到 www.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程序。
b.
使用
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
转载于:https://blog.51cto.com/redhat2007/987196