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

Lighttpd Redirect to SSL приводит к 301 циклу перенаправления

Я использую lighttpd 1.4.31 с поддержкой ssl, и у меня возникла проблема с принудительным использованием https на определенном виртуальном хосте. Если я отключу строку перенаправления из следующей конфигурации, она будет работать, как ожидалось (http и https работают, но перенаправления нет), но когда я включаю ее, я обнаруживаю, что браузер вызывает причину в цикле 301 с. Я не понимаю, почему это происходит, поскольку для меня перенаправление должно применяться только в http. У меня есть mod_redirect, загруженный в верхней части конфигурации, и еще один виртуальный хост с принудительным ssl для некоторого домена ... Я не верю, что это должно иметь какое-либо влияние. Что я делаю не так в следующем фрагменте конфигурации? Обратите внимание, что я заменил свой домен site.example.com.

$HTTP["host"] == "site.example.com" {
    dir-listing.activate = "enable"
    accesslog.filename = "/home/lighttpd/site.example.com/logs/access.log"
    server.document-root = "/home/lighttpd/site.example.com/htdocs"
    server.upload-dirs = ("/tmp")
    server.errorlog = "/home/lighttpd/site.example.com/logs/error.log"
    $SERVER["socket"] == ":443" {
            ssl.engine = "enable"
            ssl.pemfile = "/home/lighttpd/site.example.com/cert.pem"

            $HTTP["url"] =~ "^/shell" { # shellinabox
                    proxy.server = ( "" => ((
                                    "host" => "127.0.0.1",
                                    "port" => 4200,
                                    ),),)
            }
    }
    $HTTP["scheme"] == "http" {
            url.redirect = (".*" => "https://site.example.com/$0")
    }
}
  • Я подозреваю, что ваш прокси-сервер перенаправляет обратно на http
  • отлаживать заголовки с помощью curl -v
  • debug.log-request-handling = "enable" и проверьте error.log, также см. DebugVariables

Взглянем на мою конфигурацию, которая почти такая же, как у вас:

  • Я хочу https
  • и http перенаправление на https.

У меня есть еще одна вещь в моей конфигурации сокета:

$SERVER["socket"] == ":443" {
        ssl.engine  = "enable"

        # .....

        setenv.add-environment = (
                "HTTPS" => "on"
        )
}

И мой редирект обрабатывается вне первого хозяин, как это:

$HTTP["scheme"] == "http" {
        $HTTP["host"] =~ "site.example.fr" {
                url.redirect = ( "^/(.*)" => "https://site.example.fr/$1" )
        }
}

И все работает как шарм.