<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_cgi

可用语言:  en  |  fr  |  ja  |  ko 

描述执行 CGI 脚本
状态基础
模块标识符cgi_module
源文件mod_cgi.c

摘要

任何具有处理程序 cgi-script 的文件都将被视为 CGI 脚本,并由服务器运行,其输出将返回给客户端。文件通过以下方式获取此处理程序:其名称包含由 AddHandler 指令定义的扩展名,或者位于 ScriptAlias 目录中。

有关使用 Apache 的 CGI 脚本的介绍,请参阅我们关于 使用 CGI 的动态内容 的教程。

在使用 unix 下的多线程 MPM 时,应使用模块 mod_cgid 代替此模块。在用户级别,这两个模块本质上是相同的。

为了向后兼容,cgi-script 处理程序也将针对任何具有 mime 类型 application/x-httpd-cgi 的文件激活。使用魔术 mime 类型已过时。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

CGI 环境变量

服务器将设置 CGI 环境变量,如 CGI 规范 中所述,并具有以下规定

PATH_INFO
如果 AcceptPathInfo 指令显式设置为 off,则此变量将不可用。默认行为(如果未给出 AcceptPathInfo)是 mod_cgi 将接受路径信息(在 URI 中的脚本文件名之后尾随 /more/path/info),而核心服务器将返回 404 NOT FOUND 错误,用于具有附加路径信息的请求。省略 AcceptPathInfo 指令与为 mod_cgi 请求将其设置为 On 的效果相同。
REMOTE_HOST
仅当 HostnameLookups 设置为 on(默认情况下为 off)并且访问主机地址的反向 DNS 查找确实找到主机名时,才会设置此变量。
REMOTE_IDENT
仅当 IdentityCheck 设置为 on 并且访问主机支持 ident 协议时,才会设置此变量。请注意,此变量的内容不可靠,因为它很容易被伪造,如果客户端和服务器之间存在代理,它通常毫无用处。
REMOTE_USER
仅当 CGI 脚本受身份验证时,才会设置此变量。

此模块还利用核心函数 ap_add_common_varsap_add_cgi_vars 添加环境变量,例如

DOCUMENT_ROOT
使用相关 DocumentRoot 指令的内容设置。
SERVER_NAME
与请求相关的完全限定域名。
SERVER_ADDR
为请求提供服务的虚拟主机的 IP 地址。
SERVER_ADMIN
使用相关 ServerAdmin 指令的内容设置。

为了获得详尽的列表,建议编写一个基本的 CGI 脚本,以方便的格式转储 Apache 传递的所有环境变量。

top

CGI 调试

调试 CGI 脚本传统上很困难,主要是因为无法研究无法正常运行的脚本的输出(标准输出和错误)。这些指令在发生错误时提供更详细的错误日志记录。

CGI 日志文件格式

配置后,CGI 错误日志将记录任何未正确执行的 CGI。每个无法运行的 CGI 脚本都会导致记录多行信息。前两行始终采用以下格式

%% [time] request-line
%% HTTP-status CGI-script-filename

如果错误是 CGI 脚本无法运行,则日志文件将包含另外两行

%%error
error-message

或者,如果错误是由于脚本返回不正确的标头信息(通常是由于脚本中的错误)造成的,则会记录以下信息

%request
接收到的所有 HTTP 请求标头
POST 或 PUT 实体(如果有)
%response
CGI 脚本输出的所有标头
%stdout
CGI 标准输出
%stderr
CGI 标准错误

(如果脚本没有在标准输出或标准错误上输出任何内容,则可能缺少 %stdout 和 %stderr 部分)。

top

CGIScriptTimeout 指令

描述等待 CGI 程序更多输出的时间长度
语法CGIScriptTimeout time[s|ms]
默认未设置时 Timeout 指令的值
上下文服务器配置、虚拟主机、目录、.htaccess
状态基础
模块mod_cgi
兼容性在版本 2.4.59 及更高版本中可用。

此指令限制等待 CGI 程序更多输出的时间长度。如果超过时间,请求和 CGI 将被终止。

示例

CGIScriptTimeout 20
top

ScriptLog 指令

描述CGI 脚本错误日志文件的位置
语法ScriptLog file-path
上下文服务器配置、虚拟主机
状态基础
模块mod_cgimod_cgid

ScriptLog 指令设置 CGI 脚本错误日志文件。如果没有给出 ScriptLog,则不会创建错误日志。如果给出,任何 CGI 错误都将记录到作为参数给出的文件名中。如果这是一个相对文件或路径,则它相对于 ServerRoot

示例

ScriptLog logs/cgi_log

此日志将以子进程运行的用户身份打开,在主 User 指令中指定的用户。这意味着脚本日志所在的目录需要对该用户可写,或者需要手动创建文件并将其设置为对该用户可写。如果您将脚本日志放在主日志目录中,请**不要**更改目录权限以使其对子进程运行的用户可写。

请注意,脚本日志记录旨在作为编写 CGI 脚本时的调试功能,而不是在运行的服务器上持续激活。它没有针对速度或效率进行优化,如果以与设计目的不同的方式使用,可能会存在安全问题。

top

ScriptLogBuffer 指令

描述将记录到脚本日志中的 PUT 或 POST 请求的最大数量
语法ScriptLogBuffer bytes
默认ScriptLogBuffer 1024
上下文服务器配置、虚拟主机
状态基础
模块mod_cgimod_cgid

记录到文件的任何 PUT 或 POST 实体主体的大小是有限制的,以防止如果接收了大型主体,日志文件过快地增长过大。默认情况下,最多记录 1024 字节,但这可以通过此指令更改。

top

ScriptLogLength 指令

描述CGI 脚本日志文件的大小限制
语法ScriptLogLength bytes
默认ScriptLogLength 10385760
上下文服务器配置、虚拟主机
状态基础
模块mod_cgimod_cgid

ScriptLogLength 可用于限制 CGI 脚本日志文件的大小。由于日志文件记录每个 CGI 错误的大量信息(所有请求标头、所有脚本输出),因此它可能会增长为一个大文件。为了防止由于无限制增长而导致的问题,可以使用此指令设置 CGI 日志文件的最大文件大小。如果文件超过此大小,将不再写入任何信息。

可用语言:  en  |  fr  |  ja  |  ko 

top

评论

通知
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们已实施或被认为无效/不相关,我们的版主可能会将其删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表