Я использую lighttpd 1.4.45 в системе на основе Debian и имею 10-no-www.conf
(из /etc/lighttpd/conf-available/10-no-www.conf
в lighttpd
package) используется для перенаправления 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.