Lighttpd 重定向至 SSL 导致 301 重定向循环

Lighttpd 重定向至 SSL 导致 301 重定向循环

我正在运行支持 SSL 的 lighttpd 1.4.31,但在强制特定虚拟主机使用 https 时出现问题。如果我从以下配置中禁用重定向行,它会按预期工作(http 和 https 均可工作,但没有重定向),但是当我启用它时,我发现浏览器陷入 301 循环。我不明白为什么会发生这种情况,因为对我来说重定向应该只适用于 http。我在配置顶部加载了 mod_redirect,并且另一个虚拟主机强制启用了某些域的 SSL...我不认为这会产生任何影响。我在以下配置片段中做错了什么?请注意,我用 site.example.com 替换了我的域。

$HTTP["host"] == "site.example.com" {
    dir-listing.activate = "enable"
    accesslog.filename = "/home/lighttpd/site.example.com/logs/access.log"
    server.document-root = "/home/lighttpd/site.example.com/htdocs"
    server.upload-dirs = ("/tmp")
    server.errorlog = "/home/lighttpd/site.example.com/logs/error.log"
    $SERVER["socket"] == ":443" {
            ssl.engine = "enable"
            ssl.pemfile = "/home/lighttpd/site.example.com/cert.pem"

            $HTTP["url"] =~ "^/shell" { # shellinabox
                    proxy.server = ( "" => ((
                                    "host" => "127.0.0.1",
                                    "port" => 4200,
                                    ),),)
            }
    }
    $HTTP["scheme"] == "http" {
            url.redirect = (".*" => "https://site.example.com/$0")
    }
}

答案1

看一下我的配置,它几乎和你的相同:

  • 我想要 https
  • 并将 http 重定向到 https。

我的套接字配置中还有一件事:

$SERVER["socket"] == ":443" {
        ssl.engine  = "enable"

        # .....

        setenv.add-environment = (
                "HTTPS" => "on"
        )
}

我的重定向是在第一个之外处理的主持人, 像这样:

$HTTP["scheme"] == "http" {
        $HTTP["host"] =~ "site.example.fr" {
                url.redirect = ( "^/(.*)" => "https://site.example.fr/$1" )
        }
}

一切都进展顺利。

答案2

  • 我怀疑你的代理重定向回 http
  • 使用 curl -v 调试标头
  • debug.log-request-handling = "enable"并检查 error.log,另请参阅调试变量

相关内容