我正在运行支持 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,另请参阅调试变量