描述: | CGI脚本的执行 |
---|---|
状态: | 基础 |
模块标识符: | cgi_module |
源文件: | mod_cgi.c |
任何具有处理程序的文件都
cgi-script
将被视为CGI脚本,并由服务器运行,并将其输出返回给客户端。文件通过具有包含AddHandler
指令定义的扩展名的名称或位于ScriptAlias
目录中来获取此处理程序
。
有关将CGI脚本与Apache一起使用的介绍,请参见我们的《使用CGI进行动态内容》教程。
在unix下使用多线程MPM时,
mod_cgid
应使用该模块代替该模块。在用户级别,这两个模块基本相同。
为了向后兼容,还将为任何带有mime-type的文件激活cgi-script处理程序application/x-httpd-cgi
。不建议使用magic mime类型。
服务器将按照CGI规范中的说明设置CGI环境变量,并具有以下规定:
AcceptPathInfo
指令显式设置为,则此选项
将不可用off
。如果AcceptPathInfo
未给出默认行为,则mod_cgi
它将接受路径信息(
/more/path/info
在URI中的脚本文件名之后进行跟踪),而核心服务器将为带有附加路径信息的请求返回404 NOT FOUND错误。省略AcceptPathInfo
指令与On
为mod_cgi
请求设置指令具有相同的效果。HostnameLookups
为时才设置on
(默认情况下为关闭),并且如果反向访问主机地址的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
All HTTP request headers received
POST or PUT entity (if any)
%response
All headers output by the CGI script
%stdout
CGI standard output
%stderr
CGI standard error
(如果脚本在标准输出或标准错误上未输出任何内容,则可能缺少%stdout和%stderr部分)。
描述: | CGI脚本错误日志文件的位置 |
---|---|
句法: | ScriptLog file-path |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_cgi , mod_cgid |
该ScriptLog
指令设置CGI脚本错误日志文件。如果未ScriptLog
给出,则不会创建错误日志。如果给出,则任何CGI错误都将记录到作为参数给出的文件名中。如果这是相对文件或路径,则相对于ServerRoot
。
ScriptLog logs/cgi_log
该日志将以运行子进程的用户(即 main User
指令中指定的用户)身份打开。这意味着脚本日志所在的目录需要该用户可写,或者文件需要手动创建并设置为该用户可写。如果将脚本日志放置在主日志目录中,请不要更改目录权限以使其对运行子进程的用户可写。
请注意,脚本日志记录是编写CGI脚本时的调试功能,而不是在运行的服务器上连续激活。它不是针对速度或效率进行优化的,如果以非设计方式使用,可能会带来安全问题。