在 Django App 上使用 lighttpd 和 fastcgi 进行重定向

在 Django App 上使用 lighttpd 和 fastcgi 进行重定向

我已经设置了我的 lighttpd,将所有子域名按照以下方式重定向到我的主域名* .domain.com-> domain.com。不幸的是,当我输入子域名时,www.domain.com它会直接转到http://domain.com/site.fcgi/并彻底破坏页面。当我排除子域名时,它可以完美打开页面。

使用以下 lighttpd 设置:

$HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$" {
            url.redirect = ("^/(.*)" => "http://domain.com/$1")
}

$HTTP["host"] =~ "^domain\.com(:[0-9]+)?$" {    
   server.document-root = "/var/www/servers/domain.com/awesomesite"
   accesslog.filename = "/var/www/logs/domain.com/access.log"
   server.errorlog = "/var/www/logs/domain.com/error.log"
   fastcgi.server = (
       ".fcgi" => (
           "main" => (
               # Use host / port instead of socket for TCP fastcgi
               "bin-path" => "/var/www/servers/domain.com/awesomesite/domain.fcgi",
               "socket" => "/tmp/domain.sock",
               "check-local" => "disable",
               )
          ),
    )
    alias.url = (
        "/static/" => "/var/www/servers/domain.com/awesomesite/static/",
    )
    url.rewrite-once = (
        "^(/static.*)$" => "$1",
        "^(/.*)$" => "/domain.fcgi$1",
    )     
}

此外我还添加了FORCE_SCRIPT_NAME = ''我的settings.py

我无法找出问题所在,日志文件中也没有任何信息。我​​有点迷失了方向。

答案1

url.rewrite-once在 之前触发url.redirect,并且也$HTTP["host"] =~ “domain\.com"匹配www.domain.com

因此,它首先在内部重写(例如)http://www.domain.com/http://www.domain.com/domain.fcgi/,然后将客户端重定向到http://domain.com/domain.fcgi/。客户端发送一个新请求,然后将其重写为http://domain.com/domain.fcgi/domain.fcgi/,然后发送到 django 应用程序。

解决方案是使第二个块仅匹配“domain.com”而不是子域,即$HTTP["host"] == "domain.com"(简单比较)或$HTTP["host"] =~ "^domain\.com"(锚定正则表达式)。

更严格的正则表达式$HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$"$HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"

相关内容