Ich verwende Lighttpd als Proxy, um HTTPS-Verschlüsselung zu einer Anwendung hinzuzufügen, die nicht HTTPS-fähig ist.Lighttpd X-Forwarded-Host basierend auf eingehender Anfrage
Dafür verwende ich die folgende Konfiguration:
# Listen to port 443
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
include "ssl-params.conf"
proxy.server = ("" => (("host" => "127.0.0.1", "port" => 80)))
setenv.add-request-header = (
"X-Forwarded-Proto" => "https",
"X-Forwarded-Host" => "hardcoded.domain.com",
"X-Forwarded-Port" => "443"
)
# Set Error/Log
server.errorlog = "/var/log/lighttpd/error.log"
}
Diese Konfiguration funktioniert mit einer Ausnahme. Ich muss den Wert für X-Forwarded-Host fest codieren. Das war bis vor kurzem kein Problem, aber jetzt habe ich mehrere Domains, die auf denselben Proxy verweisen und den richtigen Domainnamen weiterleiten müssen.
Gibt es eine Möglichkeit, Host aus der eingehenden HTTPS-Verbindung zu extrahieren, um den korrekten Wert an X-Forwarded-Host zu füttern?
Interessanter Fund! Die Anwendung, für die ich Proxy verwende, verwendet nur den X-Forwarded-Host und kann diesen nicht ändern. Ich denke, es gibt keine Möglichkeit, dieses Verhalten zu konfigurieren, oder? Kann ich andere Anfrage-Header lesen, bevor ich setenv benutze? – Bluuu
Ich werde versuchen, X-Forwarded-Proto zu entfernen, danke für den Hinweis. – Bluuu
Sie können mod_magnet in lighttpd verwenden, um einige willkürliche Manipulationen durchzuführen. Lua Code wäre zwei Zeilen wie (ungetestet) 'lighty.request [" X-Weitergeleitet-Host "] = lighty.request [" Host "] return 0' (mit der Rückkehr 0 in der zweiten Zeile) – gstrauss