mod_core (lua)

mod_core.lua 提供了一些用 lua 编写的实用辅助工具。

安装

默认情况下,发行版(和 make install)应提供必要的文件;但您始终可以在 contrib 文件夹中找到它们。

  • core.lua
  • core__cached_html.lua
  • core__xsendfile.lua

这样,您可以根据自己的需要修改它们(尽管建议更改文件和动作的名称,以避免冲突)。

lighttpd 应该在正确的(安装)位置搜索 core.lua,因此您不需要在此处使用绝对路径。

core.wsgi (动作)

将 URL 分割为 SCRIPT_NAME(Web 应用程序挂载的子目录)和 PATH_INFO(Web 应用程序应路由的路径)。

core.wsgi (prefix, action);
前缀
Web 应用程序挂载的 URL 前缀(“子目录”)
动作
连接到 WSGI 后端的动作块

请参阅 Howto WSGI 获取示例。

WSGI 应用程序期望将 URL 分割为 SCRIPT_NAMEPATH_INFO(CGI 环境变量);SCRIPT_NAME 是它们的“应用程序根”,而 PATH_INFO 是应用程序中请求的资源。
默认情况下,lighttpd 使用空的 PATH_INFO(除非您使用了“pathinfo;”动作,但这无济于事,因为我们此处不处理静态文件)。

重要:WSGI 是 CGI 的“扩展”;它不指定传输协议,您可以将其与普通的 CGI、FastCGI 或 SCGI(或任何其他支持基本 CGI 协议的东西)一起使用。

示例

示例:在 /trac 中的 Trac,通过 FastCGI 监听 unix:/var/run/lighttpd/trac.socket

setup {
	module_load ("mod_lua", "mod_fastcgi");
	lua.plugin "core.lua";
}
core.wsgi ( "/trac", { fastcgi "unix:/var/run/lighttpd/trac.socket"; } );

core.cached_html (动作)

尝试为当前 URL 查找带有“.html”后缀的文件,前提是我们尚未找到该 URL 的静态文件且该 URL 尚不包含“.html”后缀。

core.cached_html;

示例

setup {
	module_load "mod_lua";
	lua.plugin "core.lua";
}
docroot "/some/dynamic/app/public";
core.cached_html;
if physical.is_file {
	header.add ("X-cleanurl", "hit");
} else {
	header.add ("X-cleanurl", "miss");
	fastcgi "/var/run/lighttpd/dynamic-app.sock";
}

core.xsendfile (动作)

提供一个简单的 X-Sendfile 功能;从您的后端发送一个“X-Sendfile: /path/to/file”响应头。

core.xsendfile docroot;
文档根目录
(可选) 文件所在的文档根目录

示例

setup {
	module_load ("mod_lua", "mod_fastcgi");
	lua.plugin "core.lua";
}
fastcgi "/var/run/lighttpd/dynamic-app.sock";
core.xsendfile "/some/dynamic/app/";

auth.require_user (动作)

需要一个特定的已认证用户

auth.require_user userlist;
用户列表
允许的用户名列表

此辅助工具构建一个正则表达式来匹配 request.environment[“REMOTE_USER”],因此下面的示例与此相同:

auth.plain [ "method" => "basic", "realm" => "test", "file" => "/etc/lighttpd2/test.plain" ]; if req.env["REMOTE_USER"] !~ "^(foo1|foo2)$" { auth.deny; }

在这种情况下,此动作仅使用 lua 来创建动作,没有 lua 被执行来处理请求。

请注意:空用户名匹配未认证的用户。

示例

setup {
	module_load "mod_lua";
	lua.plugin "core.lua";
}
auth.plain [ "method" => "basic", "realm" => "test", "file" => "/etc/lighttpd2/test.plain" ];
auth.require_user ("foo1", "foo2");