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

Как перенаправить URL-адреса, не нарушая работу приложения FastCGI?

(Я считаю этот вопрос дубликатом Lighttpd перенаправляет с www.domain.com на domain.com, но тот не получил должного внимания и слишком старый).

Я пытаюсь развернуть приложение через lighttpd + FastCGI и зашифровать весь трафик. Это хорошо работает, если я явно использую HTTPS в URL-адресе, но как только я попробую перенаправить с HTTP на HTTPS, URL-адреса, имя сценария приложения (в данном случае index.py) включается в URL-адрес, поэтому вместо https://somedomain.com/bleh я получил https://somedomain.com/index.py/bleh, что вызывает ошибку "Не найдено".

Я пытался переместить что-то, но не могу понять, как правильно выполнить перенаправление. Вот соответствующий материал моего lighttpd.conf

$SERVER["socket"] == ":80" {
    $HTTP["host"] =~ "(.*)" {
        url.redirect = (
            "^/(.*)" => "https://%1/$1"
        )
    }
}

$SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "certificate.pem"
    ssl.use-sslv2 = "disable"
    ssl.use-sslv3 = "disable"
}

fastcgi.server = (
    "index.py" => ((
        "socket" => "/tmp/app.socket",
        "bin-path" => "index.py",
        "max-procs" => 1,
        "bin-environment" => (
            "REAL_SCRIPT_NAME" => ""
        ),
        "check-local" => "disable"
    ))
)

url.rewrite-once = (
    "^/favicon.ico$" => "/static/assets/favicon.ico",
    "^/static/(.*)$" => "/static/$1",
    "^/(.*)$" => "/index.py/$1"
)

перезапись происходит до перенаправления. в вашем случае решение состоит в том, чтобы поставить fastcgi и перезаписать его в сокете ssl, так как вы все равно хотите, чтобы он был только для ssl.

Пожалуйста, не создавайте сокеты в / tmp, используйте выделенный для этого каталог, где только lighttpd может создавать файлы.