Назад | Перейти на главную страницу

lighttpd 1.4: включить схему в конфигурацию перенаправления www-to-no-www с исключением пути

Я использую 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.