使用Lighttpd在不同的子域上提供多个应用程序

时间:2012-02-22 08:23:16

标签: django lighttpd fastcgi

我正在尝试使用与前端服务器相同的Lighthtpd服务器来提供具有不同应用程序的不同子域。服务子域的所有应用程序也在与Lighthtpd相同的服务器上运行。

我已按如下方式设置DNS记录(均为A记录)

mydomain.com       xx.xx.xx.xx
sub.mydomain.com   xx.xx.xx.xx

xx.xx.xx.xx对于两个记录都是相同的。

我的Lighttpd配置文件的相关部分如下

$HTTP["host"] =~ "sub.mydomain.com" {
    fastcgi.server = (
        "/ideas.fcgi" => (
            "main" => (
                "host" => "127.0.0.1",
                "port" => "9030",
            )
        ),
    )

    url.rewrite-once = (
        "^(/.*)$" => "/ideas.fcgi$1",
    )
}

$HTTP["host"] =~ "mydomain.com" {
    proxy.balance = "round-robin" proxy.server = ( "/" =>
        ( ( "host" => "127.0.0.1", "port" => 9010 ) ) )
}

在端口9010上运行的进程是一个Java Web应用程序,在9030上运行的进程是一个django webapp,在使用以下命令启动的fcgi进程中运行

./manage.py runfcgi method=threaded host=127.0.0.1 port=9030

我的问题是 - 在我的浏览器中,url,mydomain.com和sub.mydomain.com都获得了相同的Web应用程序(适用于mydomain.com的应用程序)。

似乎sub.mydomain.com的Lighttpd设置被忽略或被mydomain.com的设置覆盖。我甚至尝试在配置文件中反转两个设置的物理位置,但这也无济于事。

我确信这种配置应该是可行的。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

$HTTP["host"] =~ "mydomain.com"正在进行正则表达式匹配,因此它匹配Django子域以及域。如果您使用字符串等于如下匹配,那么Django子域将不匹配。

$HTTP["host"] == "mydomain.com"

可能有更好的方法(例如,在匹配第一个虚拟主机后跳过所有其他虚拟主机的命令),但我担心我的lighttpd知识有限。