Configuration

lighttpd 1.4:在 www-to-no-www 重定向配置中包含方案,並排除路徑

  • September 10, 2020

我在基於 Debian 的系統上使用 lighttpd 1.4.45,並使用10-no-www.conf(包/etc/lighttpd/conf-available/10-no-www.conf中的lighttpd)將“www. <something> ”重定向到“ <something> ”。

此外,我正在使用certbot“webroot”驗證方法(用於 Let’s Encrypt)。因此,我希望所有請求/.well-known/acme-challenge/*不被重定向(所以我有一個單獨的 webrootwww.和非www.域,因為每個都有不同的 SSL 證書,即使www.域只是用於重定向,它仍然需要有一個適當的SSL 證書工作)。

這是原始內容(不適用於https,不排除acme-challenge部分):

$HTTP["host"] =~ "^www\.(.*)" {
 url.redirect = ( "^/(.*)" =&gt; "http://%1/$1" )
}

這就是我想出的:

$HTTP["scheme"] == "http" {
 $HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
   $HTTP["host"] =~ "^www\.(.*)" {
     url.redirect = ( "^/(.*)" =&gt; "http://%1/$1" )
   }
 }
}

$HTTP["scheme"] == "https" {
 $HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
   $HTTP["host"] =~ "^www\.(.*)" {
     url.redirect = ( "^/(.*)" =&gt; "https://%1/$1" )
   }
 }
}

雖然這可行,但它看起來不必要地冗長——有沒有辦法參數化方案匹配,以便我可以在一個塊而不是兩個塊中完成它?

以下應該單獨工作,因為 lighttpd 目前不支持“http”和“https”以外的方案:

 $HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
   $HTTP["host"] =~ "^www\.(.*)" {
     url.redirect = ( "^/(.*)" =&gt; "https://%1/$1" )
   }
 }

注意:lighttpd 在 lighttpd 1.4.53 中添加了對 TLS-ALPN-01 的支持。目前最新的 lighttpd 是 lighttpd 1.4.55。建議將 TLS-ALPN-01 與 Let’s Encrypt 一起使用。

引用自:https://serverfault.com/questions/956511