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?

Überlauf
quelle

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
user9517
quelle
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.

Jaroslav Kuboš
quelle
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
HampusLi
quelle
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
Snyman
quelle
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/
mateusz.kijowski
quelle
-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

vInfra-Dude
quelle
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