我需要一些这方面的帮助。我在同一个 lighttpd 配置中拥有多个域,我将迁移到 letsencrypt 证书,因此我在虚拟服务器上进行模拟。
我有以下内容:
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] == "autosslxlm3.ddns.net" {
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/letsencrypt/live/autosslxlm3.ddns.net/chain.pem"
ssl.pemfile = "/etc/letsencrypt/live/autosslxlm3.ddns.net/web.pem"
}
proxy.balance = "round-robin"
proxy.server = ("" => (
( "host" => "127.0.0.1", "port" => 8888 ))
)
}
}
如果我以 https 访问,我会在 lighttpd error.log 中收到以下错误:
TLS 服务器名称 autosslxlm3.ddns.net 没有证书/私钥
这不是真的,因为它在那里,如果我删除
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
(当然还有底部的右括号),它在 https 中完美运行!但是,这将无法更新证书,因为 /.well-known/... 将被转发到端口 8888 上运行的内容,而它应该转到系统上的某个文件夹。
使用完整配置时,如果我还更改 pem 文件位置中的任何内容,则 lighttpd 将无法启动,因此,它可以正确读取配置,但第一行证书被视为“无效”或不存在。
lighttpd/1.4.53
提前致谢
答案1
在顶层配置套接字,不嵌套在其他条件中。
$SERVER["socket"] == ":443" { ... }
发生 TLS 和证书选择前HTTP 请求 URL 已知,因此$HTTP["url"]
条件无法计算为真,直到后TLS 连接已建立。