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_NAME
和 PATH_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");