• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mod_cgi

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

    摘要

    具有处理程序cgi-script的任何文件都将被视为 CGI 脚本,并由服务器 run,其输出将返回到 client。 Files 通过使 name 包含由AddHandler指令定义的扩展名或通过位于ScriptAlias 指令目录中来获取此处理程序。

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

    在 unix 下使用 multi-threaded MPM 时,应使用模块mod_cgid代替此模块。在用户 level,这两个模块基本相同。

    对于 backward-compatibility,cgi-script 处理程序也将针对具有 mime-type application/x-httpd-cgi的任何文件激活。不推荐使用 magic mime-type。

    CGI 环境变量

    服务器将按照CGI 规范中的描述设置 CGI 环境变量,并具有以下规定:

    • PATH_INFO
      如果 AcceptPathInfo 指令显式设置为 off,则无法使用此选项。如果未给出 AcceptPathInfo,则默认行为是 mod_cgi 将接受路径信息(在 URI 中的脚本文件名之后尾随/more/path/info),而核心服务器将为具有附加路径信息的请求返回 404 NOT FOUND 错误。省略 AcceptPathInfo 指令与为 mod_cgi 请求设置 On 有相同的效果。
    • REMOTEHOST
      仅当 HostnameLookups 设置为 on(默认情况下关闭),并且访问 host 的地址的反向 DNS 查找确实找到 host name 时,才会设置此项。
    • REMOTE_IDENT
      仅当 IdentityCheck 设置为 on 且访问 host 支持 ident 协议时,才会设置此项。请注意,不能依赖此变量的内容,因为它很容易被伪造,如果 client 和服务器之间有代理,它通常是完全没用的。
    • REMOTE_USER
      只有在 CGI 脚本需要进行身份验证时才会设置此项。

    该模块还利用核心函数ap_addcommon_vars和ap_add_cgi_vars添加环境变量,如:

    • DOCUMENT_ROOT
      使用相关 DocumentRoot 指令的内容进行设置。
    • SERVERNAME
      与请求相关的完全限定域 name。
    • SERVER_ADDR
      为请求提供服务的 Virtual Host 的 IP 地址。
    • SERVER_ADMIN
      使用相关 ServerAdmin 指令的内容进行设置。

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

    CGI 调试

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

    CGI 日志文件格式

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

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

    如果错误是 CGI 脚本不能 run,则 log 文件将包含额外的两个 lines:

    %%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 部分可能会丢失)。

    ScriptLog 指令

    描述:CGI 脚本错误日志文件的位置
    句法:ScriptLog file-path
    Context:server config,virtual host
    状态:Base
    模块:mod_cgi,mod_cgid

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

    ScriptLog logs/cgi_log
    

    这个 log 将以子进程 run 为 i.e 的用户打开。主用户指令中指定的用户。这意味着脚本 log 所在的目录需要该用户可写,或者该文件需要手动创建并设置为该用户可写。如果将脚本 log 放在主日志目录中,请执行NOT更改目录权限,使子进程 run 为用户可写入。

    请注意,脚本 logging 在编写 CGI 脚本时应该是一个调试 feature,并不打算在 running 服务器上连续激活。它没有针对速度或效率进行优化,并且如果以不同于其设计的方式使用,则可能存在安全问题。

    ScriptLogBuffer 指令

    描述:将在脚本日志中记录的最大 PUT 或 POST 请求数
    句法:ScriptLogBuffer bytes
    默认:ScriptLogBuffer 1024
    Context:server config,virtual host
    状态:Base
    模块:mod_cgi,mod_cgid

    记录到文件的任何 PUT 或 POST 实体主体的大小是有限的,以防止 log 文件在收到大型主体时过快地增长。默认情况下,最多会记录 1024 个字节,但可以使用此指令进行更改。

    ScriptLogLength 指令

    描述:CGI 脚本日志文件的大小限制
    句法:ScriptLogLength bytes
    默认:ScriptLogLength 10385760
    Context:server config,virtual host
    状态:Base
    模块:mod_cgi,mod_cgid

    ScriptLogLength可用于限制 CGI 脚本日志文件的大小。由于日志文件记录了每个 CGI 错误(所有请求 headers,所有脚本输出)的大量信息,因此它可能会变成一个大文件。为了防止由于无限增长引起的问题,该指令可用于为 CGI 日志文件设置最大 file-size。如果文件超过此大小,则不会向其写入更多信息。

    上篇:mod_cern_meta

    下篇:mod_cgid