Apache 的通用网关接口 (CGI) 允许您使用程序或脚本(通常指 CGI 脚本)创建动态内容。可以用任何编程语言来编写 CGI 脚本。通常使用诸如 Perl 或 PHP 之类的脚本语言。
为了使 Apache 能够传递由 CGI 脚本创建的内容,需要激活 mod_cgi。还需要 mod_alias。默认情况下启用这两种模块。请参见第 40.4.2 节 “激活和取消激活”来获取有关激活模块的详细信息。
![]() | CGI 安全性 |
|---|---|
允许服务器执行 CGI 脚本是一项潜在的安全性漏洞。请参见第 40.7 节 “避免安全性问题”以了解更多信息。 | |
在 SUSE Linux Enterprise Server 中,仅允许在目录 /srv/www/cgi-bin/ 中执行 CGI 脚本。已配置此位置来执行 CGI 脚本。如果已经创建了虚拟主机配置(请参见第 40.2.1.2 节 “虚拟主机配置”)并且想将脚本放置在特定于主机的目录中,必须解锁并配置此目录。
例 40.5. VirtualHost CGI 配置
CGI 编程不同于“常规”编程,因为 CGI 程序和脚本前面必须有一个 MIME 类型的报头,例如 Content-type: text/html。此报头将发送到客户机,所以它知道所接收内容的类型。其次,脚本的输出必须是客户机(通常是 Web 浏览器)所理解的,例如 HTML(大多数情况)、纯文本或图像。
在 /usr/share/doc/packages/apache2/test-cgi 下提供的简单测试脚本是 Apache 包的一部分。它将某些环境变量的内容输出为纯文本。将此脚本复制到 /srv/www/cgi-bin/ 或您虚拟主机的脚本目录 (/srv/www/www.example.com/cgi-bin/) 中,并将它命名为 test.cgi。
用户 root 应该有可由 Web 服务器访问的文件(请参见第 40.7 节 “避免安全性问题”获取其他信息)。由于该 Web 服务器是由不同用户运行的,所以 CGI 脚本必须可被世界各地的用户执行和读取。更改为 CGI 目录并使用命令 chmod 755 test.cgi 来应用正确的权限。
现在调用 http://localhost/cgi-bin/test.cgi 或 http://www.example.com/cgi-bin/test.cgi。应该能看到 “CGI/1.0 测试脚本报告”。
如果没有看到测试程序的输出而是看到了错误消息,则请检查以下项:
CGI 查错
是否在更改配置后重装载了服务器?请检查 rcapache2 probe。
如果已经配置了自定义 CGI 目录,那么该配置是否正确?如果不确定,请尝试默认 CGI 目录 /srv/www/cgi-bin/ 中的脚本并用 http://localhost/cgi-bin/test.cgi 调用它。
文件权限是否正确?更改为 CGI 目录并执行 ls -l test.cgi。它的输出应该以下面的字符串开头
-rwxr-xr-x 1 root root
确保脚本中没有编程错误。如果还未更改 test.cgi,则问题应该不大,但是如果正在使用您自己的程序,则始终要确保它们中没有编程错误。