Apache Reverse Proxy-Fehlerseite, wenn der Proxy-Server nicht verfügbar ist


7

Ich verwende Apache2 als Reverse-Proxy für Tomcat. Meine Konfiguration lautet wie folgt:

ProxyRequests Off

ProxyPass        / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

Meine Frage lautet: Kann ich Apache so konfigurieren, dass eine Höflichkeitsseite (eine statische HTML-Seite "im Aufbau") angezeigt wird, wenn Tomcat nicht verfügbar ist?

Antworten:


13

Sie können dazu die Apache ErrorDocument- Direktive verwenden. Sie sollten eine URL verwenden, um auf Ihr ErrorDocument zu verweisen. Wenn Sie eine Dateisystemreferenz verwenden, erhalten Sie beim Versuch, diese zu finden, zusätzlich 503.

ErrorDocument 503 http://somehost.tld/errors/503.html

1
Das ist richtig, da ich alle Seiten ab "/" als Proxy verwende, sodass es keinen Webserver gibt, der tatsächlich eine Fehlerseite vom Typ "/var/www/html/error/gonefishing.html"
Overflow bedient

Es besteht die Möglichkeit, dies ohne zusätzliche URL zu tun. Verwenden Sie einen Alias. Siehe meine Antwort unten.
Jaroslav Kuboš

3

Hier ist eine Lösung ohne zusätzlichen Server oder einen anderen Port:

ProxyPass /http_errors/ !

#Actual proxy config, must be below exception!
ProxyPass / ajp://myserver:12345/

Alias /http_errors/ /var/www/http/
ErrorDocument 503 /http_errors/503.html

Zusamenfassend:

  1. Proxy-Ausnahme für einige Alias ​​hinzufügen, z. B. http_errors (muss vor der eigentlichen Proxy-Regel stehen)
  2. Ordnen Sie den Alias ​​dem realen Pfad zu (muss vorhanden und für Apache zugänglich sein).
  3. Ordnen Sie den angegebenen HTTP-Statuscode einer bestimmten Datei innerhalb des Alias ​​zu

Für das obige Setup lautet die im Problemfall angezeigte Datei /var/www/http/503.html.


1

Apache gibt einen 503-Fehler "Dienst nicht verfügbar" aus, wenn keine Verbindung zu Tomcat hergestellt werden kann. Sie könnten einfach eine "schöne" 503-Fehlerseite erstellen.

ErrorDocument 503 /var/www/html/error/gonefishing.html

Ist das nicht das dritte Argument Aktion eine URL oder Text - String kein Dateipfad? In diesem Fall funktioniert dies ab Apache 2.4 nicht mehr. Weitere Informationen finden Sie unter httpd.apache.org/docs/2.4/custom-error.html .
Aaron

0

Wenn auf Ihrem lokalen Server Apache die Standardports überwacht, können Sie eine ERROR-URL auf den lokalen Host verweisen und dort benutzerdefinierte Fehlerseiten zur Verfügung stellen. Negiert die Notwendigkeit einer separaten Domäne / eines separaten Servers

ProxyPass /ERROR http:// localhost:80/

ProxyPass        / http:// localhost:8080/
ProxyPassReverse / http:// localhost:8080/

ErrorDocument 503 /ERROR/custom_50x.html

0

Sie können auch verhindern, dass alle /error/Anforderungen an den Back-End-Server weitergeleitet werden:

ProxyPass /error/ !

ProxyPass        / http:// localhost:8080/
ProxyPassReverse / http:// localhost:8080/

-1

Die Reihenfolge der ProxyPass-Anweisungen, wie sie in den Informationen von @ snyman aufgeführt sind, ist sehr wichtig. Der Proxypass-Fehler sollte die erste Proxypass-Anweisung für den virtualhost sein, bevor andere Proxypass-Anweisungen geschrieben werden.

Dies ist meine Erfahrung auf Centos 7 mit Apache 2.4 und Tomcat7


Dies beantwortet die Frage nicht. Wenn dies bei Centos 7 und dem Kommentar zu Snymans Antwort tatsächlich der Fall ist, sollten Sie in Betracht ziehen, seiner Antwort einen Kommentar hinzuzufügen.
Reichhart
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.