lighty 的生活

lighty 开发者博客

Lighttpd 揭秘 - 第二部分

lighttpd 1.4.0 的一个重要特性是嵌套条件句,但它们如何使用?什么是 include?

嵌套条件句的例子已在公告中提及。

$HTTP["host"] == "www.example.org" {
  $HTTP["url"] =~ "^/dav($|/)" {
    webdav.activate = "enable" 
  }
  $HTTP["remoteip"] != "10.0.0.0/16" {
    auth.require = ( "" => ( "method" => "basic",
                             "realm" => "webdav",
                             "require" => "valid-user" ) )
  }
}

那么 include 是用来做什么的呢?首先,我们想采用批量托管的方式,并希望为虚拟主机创建一个通用模式,而无需使用 mod_simple_vhost 或类似的模块。

我们有一个简单的 Web 服务器结构

  • 所有服务器都在 /var/www/servers/ 下
  • 该部分是服务器的主机名
  • 日志和公共文件位于 logs/ 和 pages/

最终路径为 /var/www/servers/www.example.org/pages/

在 lighttpd 1.3.x 中,您必须复制所有主机的条件句,包括所有选项。当时无法对配置文件进行任何解释。

在 lighttpd 1.4.0 中,情况发生了变化,我们可以使用表达式和 includes

server.document-root = "/tmp"
server.port = 1025

server.modules = ( "mod_access" )

access.deny = ( "~", ".inc" )

$HTTP["host"] == "www.example.org" {
  var.hostname = "www.example.org"
  include "baseconfig.conf"
}

$HTTP["host"] == "www2.example.org" {
  var.hostname = "www2.example.org"
  include "baseconfig.conf"
}

以及一个 baseconfig.conf

server.document-root = "/var/www/servers/" + hostname + "/pages/"
access.logfile = "/var/www/servers/" + hostname + "/logs/accesslog"

通过 var.hostname,您可以在配置中设置一个用户变量,该变量可以在配置中的任何地方使用来传递数据。我们在这里使用它来替换 baseconfig 中每个主机的部分,并为每个主机设置文档根目录和访问日志的位置。

但是 lighttpd 使用的配置是什么样的呢?选项 -p 会告诉我们

$ /lighttpd -p -f ./lighttpd-includes.conf
config {
    server.document-root = "/tmp"
    server.port          = 1025
    server.modules       = ("mod_indexfile", "mod_access", "mod_dirlisting", "mod_staticfile")
    access.deny          = ("~", ".inc")


    $HTTP["host"] == "www.example.org" {
        # block 1
        var.hostname         = "www.example.org"
        server.document-root = "/var/www/servers/www.example.org/pages/"
        access.logfile       = "/var/www/servers/www.example.org/logs/accesslog"

    } # end of $HTTP["host"] == "www.example.org"

    $HTTP["host"] == "www2.example.org" {
        # block 2
        var.hostname         = "www2.example.org"
        server.document-root = "/var/www/servers/www2.example.org/pages/"
        access.logfile       = "/var/www/servers/www2.example.org/logs/accesslog"

    } # end of $HTTP["host"] == "www2.example.org"
}

很棒,不是吗?:)

lighttpd

请注意,我们不接受发布超过3个月的评论! 另外,请使用我们的 bug 追踪器报告 bug,并使用我们的 IRC 频道 #lighttpd@libera 进行交流。

« lighttpd 揭秘 - 第一部分 美化错误页面 »