相关模块 
mod_alias
mod_cgi
相关指令
 AddHandler
Options
ScriptAlias
CGI(公共网关接口[Common Gateway Interface])定义了网站服务器与外部内容协商程序之间交互的方法,通常是指CGI程序或者CGI脚本,是在网站上实现动态页面的最简单而常用的方法。
一、配置Apache以允许CGI

1、ScriptAlias指令 
·使Apache允许 执行一个特定目录中的CGI程序。当客户端请求此特定目录中的资源时,Apache假定其中文件都是CGI程序并试图运行。
·如:ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/     目录映射
· 在其默认的配置文件httpd.conf中则会有上述配置
·ScriptAlias指令定义了映射到一个特定目录的URL前缀与Alias指令非常相似,两者一般都用于指定位于DocumentRoot目录以外的目录,其区别是ScriptAlias又多了一层含义,即其URL前缀中任何文件都被视为CGI程序。所以,上述例子会指示Apache,/cgi-bin/应该指向/usr/local/apache/cgi-bin/目录,且视之为CGI程序。

2、用Options显式地允许CGI的执行
·可以在 主服务器配置文件中,使用Options指令显式地允许 特定目录中CGI的执行:
<Directory /usr/local/apache/htdocs/somedir>
Options +ExecCGI
</Directory>
·上述指令使Apache允许CGI文件的执行。另外,还必须告诉服务器哪些文件是CGI文件。下面的AddHandler指令告诉服务器所有带有cgi或pl后缀的文件是CGI程序: AddHandler cgi-script cgi pl
3、.htaccess文件
·.htaccess文件是针对目录进行配置的一种方法。
·Apache在提供一个资源时,会在此资源所在目录中寻找.htaccess文件,如果有,则使其中的指令生效。AllowOverride 指令决定了.htaccess文件是否有效,它指定了哪些指令可以出现在其中,或者根本不允许使用。
A为此,需要在主服务器配置中如此配置:
AllowOverride Options
B、在.htaccess文件中,需要如此配置:
Options +ExecCGI
以使Apache允许此目录中CGI程序的执行。

二、第一个CGI程序
这个CGI程序例子在浏览器中打印一行文字。把下列存为first.pl文件,并放在你的cgi-bin目录中。
#!/usr/bin/perl
print "Content-type: text/html ";
print "Hello, World.";

三、排错
从网络访问CGI程序,浏览器中可能会发生四种情况:
·CGI程序的输出                                                                   这说明一切正常。
·CGI程序的源代码或者一个"POST Method Not Allowed"消息       这说明 Apache没有被正确配置以执行CGI程序,重新阅读configuring Apache看看遗漏了什么。
·一个以"Forbidden"开头的消息                                                这说明有权限问题。参考Apache error log和下面的文件的权限。
·一个"Internal Server Error"消息
查阅Apache error log,可以找到CGI程序产生的出错消息"Premature end of script headers"。对此,需要检查下列各项,以找出不能产生正确HTTP头的原因。
3、1文件的权限
·服务器不是以你的用户身份运行的,在服务器启动后,拥有的是一个非特权用户的权限-通常是``nobody''或者``apache'' -而需要更大的权限以允许文件的执行。通常,给予``nobody''足够的权限以执行文件的方法是,对文件赋予everyone execute权限: chmod a+x first.pl
·另外,如果需要对其他文件进行读取或写入,也必须对这些文件赋予正确的权限。
3、2路径信息
当你在命令行执行一个程序,某些信息会自动传给shell而无须你操心,比如一个路径,告诉shell你所引用的文件可以在哪儿找到。但是,在CGI程序通过网站服务器执行时,则没有此路径,所以,你在CGI程序中引用的任何程序(如sendmail) 都必须指定其完整的路径,使shell能找到它们以执行你的CGI程序。普通的用法是,在CGI程序的第一行中指明解释器(通常是perl),形如:#!/usr/bin/perl 必须保证它的确指向解释器。
3、3语法错误
多数CGI程序失败的原因在于程序本身有问题。在用浏览器测试以前,先在命令行中执行你的程序,能够发现大多数的问题。
3、4出错记录
出错记录是你的朋友。任何错误都会在出错记录中有记载,所以你应该首先查看它。学会阅读出错记录,可以快速找出问题并快速解决。
四、 其它
环境变量 
环境变量是使用计算机时到处都会用到的变量,比如路径、你的用户名以及你的终端类型等等。
在命令行输入env,可以得到你的标准的当天的环境变量列表。
完整的变量列表见 [url]http://hoohoo.ncsa.uiuc.edu/cgi/env.html[/url]
STDIN和STDOUT
服务器和客户端之间的其他通讯都通过标准输入设备(STDIN)和标准输出设备(STDOUT)完成。通常,STDIN是指键盘或者一个程序所作用于的一个文件,STDOUT指控制台或显示器。
当你POST一个网络表格到一个CGI程序时,表格中的数据被捆扎为一个特殊形式通过STDIN传送给CGI程序,这样,这个程序就可以处理这些数据,仿佛这些数据来自键盘或者一个文件。
接着,你的程序必须把这个字串分离以获得有用的信息。所幸,有库和模块可以帮助你处理这些数据,还有为你的CGI程序达成其他目的的处理器。
POST---TABLE---STDIN----CGI----STDOUT-----CLIENT
 
职场 操作系统 网络技术 Apache

0

收藏

上一篇:RedHat5实现负载均衡 下一篇:配置nagios时,apache...
noavatar_middle.gif
cqfish

272篇文章,107W+人气,1粉丝

关注