Я использую lighttpd 1.4.45 в системе на основе Debian и имею 10-no-www.conf
(из /etc/lighttpd/conf-available/10-no-www.conf
в пакете lighttpd
) используется для перенаправления "www.
Кроме того, я использую certbot
с методом проверки" webroot "(для Let's Encrypt). Поэтому я хочу, чтобы все запросы к /. Well-known / acme-challenge / *
не перенаправлялись (поэтому у меня есть отдельный корневой каталог для www.
и домен не www.
, поскольку каждый из них имеет свой сертификат SSL, хотя домен www.
предназначен только для перенаправления, он все равно должен иметь соответствующий сертификат SSL для работы) .
Это исходный контент (не работает с https, не исключает часть acme-challenge):
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
Это то, что я придумал:
$HTTP["scheme"] == "http" {
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
}
}
$HTTP["scheme"] == "https" {
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
}
Хотя это работает, оно выглядит излишне многословным - - есть ли способ параметризовать сопоставление схем, чтобы я мог делать это одним блоком вместо двух?
Следующее должно работать само по себе, поскольку lighttpd в настоящее время не поддерживает схемы, кроме «http» и «https»:
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
Примечание: lighttpd добавил поддержку TLS-ALPN-01 в lighttpd 1.4.53. Последний на данный момент lighttpd - это lighttpd 1.4.55. TLS-ALPN-01 рекомендуется для использования с Let's Encrypt.