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_alias 的 alias.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-idle 和 server.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 = ( "" => "" ) }