1

是否可以配置 lighttpd以便在文件存在时对文件的请求成功,但在文件不存在时被处理和重定向,例如到 cgi 脚本?

我想要实现的是在磁盘上有一组由脚本生成并直接提供的图像文件。在请求中,如果文件不存在,脚本将生成图像并将其保存到磁盘(用于将来的请求),然后直接提供图像或重定向回相同的 URL,这一次将成功。我本质上是在磁盘上缓存生成的输出。

我目前有一个原型,其中脚本始终处理请求,读取并回显文件(如果存在),但我宁愿节省开销并尽可能让 lighttpd 直接提供服务。

4

3 回答 3

1

你可以两全其美。如果你给它一个 Lighttpd 将提供文件

X-Sendfile: path to file

见:http ://redmine.lighttpd.net/wiki/1/X-LIGHTTPD-send-file 。文档页面上有一个 php 示例。

于 2010-01-25T13:46:20.890 回答
1

您可以设置:

server.error-handler-404 

脚本的配置选项,它将执行您想要的操作。

http://redmine.lighttpd.net/wiki/1/Server.error-handler-404Details

于 2010-03-17T17:12:10.487 回答
0

这个问题可能很老,但它确切地问了我想要回答的问题。这是我想出的解决方案...

这是 Lighttpd 的完整且最小的工作配置文件。

server.document-root = "/srv/http"
server.port = 80
server.username = "nobody"
server.groupname = "nobody"
server.dir-listing = "enable"
server.stream-response-body = 2
server.modules = (
  "mod_rewrite",
  "mod_alias",
  "mod_cgi"
)
url.rewrite-if-not-file = ( "^/alpine/.*\.apk$" => "/fecher" )
alias.url += ( "/fecher"   => "/bin/fecher" )
$HTTP["url"] =~ "^/fecher$" {
    cgi.assign = ( "" => "" )
}

它位于我存储包文件的服务器上。它直接为它拥有的任何文件提供服务,并且对它没有的任何文件的请求都委托给一个名为/bin/fecher.

如果服务器遇到与缺少文件的第一个表达式匹配的 URL,则 URL 将被重写并映射到执行的 CGI 脚本。

在我的服务器/bin/fecher上是一个 shell 脚本,它从上游提取丢失的包,将其返回给客户端并将其存储在本地以供将来请求。

于 2021-07-02T16:42:41.907 回答