通用网关接口 (CGI) 定义了一种使 Web 服务器与外部内容生成程序相交互的一种方式。该方式常被称为 CGI 程序或 CGI 脚本。这种方式是最简单且非常常用的向网站中添加动态内容的方式。本文向您简单介绍了如何在 Apache 服务器上配置 CGI 并开始编写 CGI 程序。
(适用绝大多数 Apache 服务器: 1.3,2.0,2.2)
配置 Apache 使其允许CGI程序的执行
有多种方式。
ScriptAlias
该指标告诉 Apache 某一目录是 CGI 程序。 Apache 将认为该目录下每个文件都是CGI程序。当客户端请求某一资源时,Apache 将试图执行它们。
该项指标的设置为 (通常是在Apache文件httpd.conf 中):
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
它告诉了Apache任何以 /cgi-bin/ 开头的请求都会到 /usr/lib/cgi-bin/ 去处理,并将被视为一个 CGI 程序。
例如,当 http://www.example.com/cgi-bin/example.cgi 被请求时,Apache会试图去执行 /usr/lib/cgi-bin/example.cgi 文件,并返回输出结果。当然,该文件必须存在并且是可执行的,否则将出错。
用 Options 选项使 CGI 可执行
除了用 ScriptAlias,你也可以在Apache配置文件中显式使用 Options 指标告诉 Apache 某一目录 (你自定义的目录) 下允许执行CGI程序:
<Directory /var/www/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>
用 Options 时你要告诉 Apache 哪些文件是 CGI 文件。故在 Options后面还要跟一个 AddHandler 指标 (如指定 .cgi 和 .pl 为可执行文件)。
<Directory /var/www/apache2/htdocs/somedir>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
编写 CGI 程序
CGI 程序与普通程序主要有两点不同。一是要在所有输出前用 MIME-type 告诉客户端要接收内容的格式;二是输出要是 HTML 或其它可显示的内容。除此之外,写 CGI 程序与写其它程序类似。
打开一个空文档,添加如下内容并保存到你所设定的cgi-bin的目录中 (假定文件名为 first.cgi ):
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
第一行告诉Web服务器用 /usr/lib/perl 编译器编译此文件。第二行告诉客户端输出的格式为 HTML,第三行输出内容。
打开浏览器,输入 http://localhost/cgi-bin/first.cgi,你就应当能看到 Hello, World 了。
为什么不管用?
或许你看到的内容是:
输出了你的 CGI 程序: 这可能意味着你没有设 MIME-type。
以 Fobbiden 开头的消息:这意味着权限问题。
Internal Server Error 消息:这时就要检查以下几个方面了。
A. 文件权限
服务器没有权限执行此文件。 这时要改变文件的执行权限:
chmod 755 first.cgi
或
chmod a+x first.cgi
B. 路径信息与环境变量
常见的是文件第一行没有正确设定 perl 编译器所在的路径。要确保编译器的路径正确。
C. 程序有错
这是很可能的一个方面。
D. 错误日志
更多信息请参考 Apache 官方网站。