
Ich richte nginx als Reverse-Proxy ein. Bisher habe ich nur Apache verwendet, und zwar ohne virtuelle Hosts.
Ich möchte, dass meine Benutzer auf verschiedene Intranet-Webdienste zugreifen können, indem sie einfach den Namen des Dienstes in die Adressleiste eingeben. Beispielsweise indem sie „timesheets“ statt „timesheets.intranet.local“ eingeben.
Wenn ich auf einem Client-Computer „wget“ oder einen Browser verwende, um auf den FQDN für die Site (timesheets.intranet.local) zuzugreifen, ist alles in Ordnung.
Wenn ich auf einem Client-Rechner „wget“ oder einen Browser verwende, um auf den einfachen Hostnamen für die Site (Zeittabellen) zuzugreifen, schlägt dies fehl.
Wenn ich „wget“ lokal auf dem Nginx-Server-Rechner verwende, funktioniert beides einwandfrei.
Meine Site-Konfiguration sieht folgendermaßen aus:
server {
server_name timesheets timesheets.intranet.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /root/timesheet.crt;
ssl_certificate_key /root/timesheet.key;
}
Die Namensauflösung ist nicht das Problem. „wget“ auf dem Client-Computer löst die IP-Adresse korrekt auf, kann die Seite aber trotzdem nicht abrufen.
Antwort1
Bei der Konfiguration eines Reverse-Proxys müssen Sie nicht nur auf die Proxy-Konfiguration achten, sondern auch die Konfiguration eines dahinter liegenden Dienstes berücksichtigen.
Der Proxy muss nicht nur einen Namen in seinem virtuellen Host akzeptieren, sondern auch einen Host-Header ausgeben, der vom Backend erwartet wird. In diesem Fall ist es am einfachsten, sowohl den Proxy als auch das Backend so zu konfigurieren, dass sie einen kurzen, unqualifizierten Hostnamen akzeptieren.
Eine alternative Möglichkeit könnte darin bestehen, zu überschreiben, welcher Host-Header-Proxy an ein Backend sendet. Dann muss Ihr Backend nur diesen Hostnamen bedienen. Siehe diese Antworthttps://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy