Apache HTTP 服务器版本 2.4
描述 | 执行 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 类型已过时。
服务器将设置 CGI 环境变量,如 CGI 规范 中所述,并具有以下规定
AcceptPathInfo
指令显式设置为 off
,则此变量将不可用。默认行为(如果未给出 AcceptPathInfo
)是 mod_cgi
将接受路径信息(在 URI 中的脚本文件名之后尾随 /more/path/info
),而核心服务器将返回 404 NOT FOUND 错误,用于具有附加路径信息的请求。省略 AcceptPathInfo
指令与为 mod_cgi
请求将其设置为 On
的效果相同。HostnameLookups
设置为 on
(默认情况下为 off)并且访问主机地址的反向 DNS 查找确实找到主机名时,才会设置此变量。IdentityCheck
设置为 on
并且访问主机支持 ident 协议时,才会设置此变量。请注意,此变量的内容不可靠,因为它很容易被伪造,如果客户端和服务器之间存在代理,它通常毫无用处。此模块还利用核心函数 ap_add_common_vars 和 ap_add_cgi_vars 添加环境变量,例如
DocumentRoot
指令的内容设置。ServerAdmin
指令的内容设置。为了获得详尽的列表,建议编写一个基本的 CGI 脚本,以方便的格式转储 Apache 传递的所有环境变量。
调试 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 部分)。
描述 | 等待 CGI 程序更多输出的时间长度 |
---|---|
语法 | CGIScriptTimeout time[s|ms] |
默认 | 未设置时 |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
状态 | 基础 |
模块 | mod_cgi |
兼容性 | 在版本 2.4.59 及更高版本中可用。 |
此指令限制等待 CGI 程序更多输出的时间长度。如果超过时间,请求和 CGI 将被终止。
CGIScriptTimeout 20
描述 | CGI 脚本错误日志文件的位置 |
---|---|
语法 | ScriptLog file-path |
上下文 | 服务器配置、虚拟主机 |
状态 | 基础 |
模块 | mod_cgi 、mod_cgid |
ScriptLog
指令设置 CGI 脚本错误日志文件。如果没有给出 ScriptLog
,则不会创建错误日志。如果给出,任何 CGI 错误都将记录到作为参数给出的文件名中。如果这是一个相对文件或路径,则它相对于 ServerRoot
。
ScriptLog logs/cgi_log
此日志将以子进程运行的用户身份打开,即在主 User
指令中指定的用户。这意味着脚本日志所在的目录需要对该用户可写,或者需要手动创建文件并将其设置为对该用户可写。如果您将脚本日志放在主日志目录中,请**不要**更改目录权限以使其对子进程运行的用户可写。
请注意,脚本日志记录旨在作为编写 CGI 脚本时的调试功能,而不是在运行的服务器上持续激活。它没有针对速度或效率进行优化,如果以与设计目的不同的方式使用,可能会存在安全问题。