项目

常规

个人资料

操作

CGI 模块

模块: mod_cgi

描述

CGI 技术规范和参考
RFC3875 公共网关接口 (CGI) 版本 1.1

CGI 允许您通过运行自定义脚本或程序来处理请求,从而增强服务器的功能。

注意:要捕获 CGI 进程的 stderr 输出,请设置 server.breakagelog = "/var/log/lighttpd/breakage.log"

选项

cgi.assign

由 CGI 程序处理的文件扩展名

    cgi.assign = ( ".pl"  => "/usr/bin/perl",
                   ".cgi" => "/usr/bin/perl" )

对于 PHP,请不要忘记在 php.ini 中设置 cgi.fix_pathinfo = 1

要获得传统的“cgi-bin”行为,即脚本位于 /cgi-bin

    # Note: make sure that mod_alias is loaded if you use this:
    alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )
    $HTTP["url"] =~ "^/cgi-bin" {
        cgi.assign = ( "" => "" )
    }

( "" => "" ) 左侧的空字符串 ("") 匹配所有内容。
( "" => "" ) 右侧的空字符串 ("") 是一个魔术令牌,表示请求目标是应该运行的文件。
如果 cgi-bin 目录不在文件系统中的 server.document-root 下,那么您需要使用 mod_aliasalias.url 来将 /cgi-bin 映射到 /filesystem/path/to/cgi-bin

cgi.execute-x-only
如果启用,CGI 脚本需要 +x 权限。

cgi.x-sendfile (自 1.4.40 起)
如果“x-sendfile”功能处于活动状态,包含完整路径的 X-Sendfile 响应头将导致 lighttpd 发送在该路径找到的本地文件,而不是后端生成的内容。参见 mod_fastcgi X-Sendfile

    cgi.x-sendfile = "enable"  # default "disable" 

cgi.x-sendfile-docroot (自 1.4.40 起)
“x-sendfile-docroot”限制了 X-Sendfile 响应头提供的路径中允许的目录树(绝对文件系统路径)。参见 mod_fastcgi X-Sendfile

    cgi.x-sendfile-docroot = ( "/srv/www/html", "/srv/www/static" )

cgi.local-redir (自 1.4.46 起)
https://datatracker.ietf.org/doc/html/rfc3875 6.2.2 本地重定向响应优化

    cgi.local-redir = "enable"  # default "disable" 

cgi.upgrade (自 1.4.46 起)
支持 Upgrade: websocket

    cgi.upgrade = "enable"  # default "disable" 

根据 websocket 应用程序,请同时查看 server.max-read-idleserver.max-write-idle 的设置。

cgi.limits (自 1.4.60 起)
  • 要应用于 CGI 的限制列表
    • “write-timeout” - 尝试写入后端时中止前的秒数(默认值:0;无超时)(自 1.4.60 起)
    • “read-timeout” - 尝试从后端读取时中止前的秒数(默认值:0;无超时)(自 1.4.60 起)
    • “tcp-fin-propagate” - 如果从客户端收到 TCP FIN,则向 CGI 发送指定信号(默认值:无)(自 1.4.60 起)
    cgi.limits = ("write-timeout" => 15, "read-timeout" => 15, "tcp-fin-propagate" => "SIGTERM")  # default: none

PATH 环境变量

lighttpd 未指定 CGI 执行环境中的默认 PATH 环境变量,因此会使用 shell 中内置的默认 PATH(例如 PATH="/bin:/usr/bin")。要为 CGI 脚本指定 PATH,请使用 mod_setenv
在 lighttpd 1.4.46 及更高版本中,推荐使用 setenv.set-environment

    setenv.set-environment = ( "PATH" => "/sbin:/usr/sbin:/bin:/usr/bin" )

对于 lighttpd 1.4.45 及更早版本,请使用
    setenv.add-environment = ( "PATH" => "/sbin:/usr/sbin:/bin:/usr/bin" )

示例

要设置一个可以独立运行的可执行文件(例如二进制文件、带有 shebang 行的脚本),请为扩展名指定一个空白处理程序

  cgi.assign = ( ".sh" => "" )

如果文件没有扩展名,请记住 lighttpd 匹配的不是扩展名本身,而是 URL 的右侧部分(后缀)

  cgi.assign = ( "/testfile" => "" )

借助 mod_alias,将 CGI 脚本指定为 URL 路径的默认处理程序,即使该路径是虚拟的

$HTTP["url"] =~ "^/urlpath(?:/|$)" {
  alias.url = ( "/urlpath" => "/path/to/script" )
  cgi.assign = ( "" => "" )
}

gstrauss3 个月 前更新 · 35 次修订