
Ich habe nginx als HTTP-Server mit Tomcat als Backend (mit Proxy_Pass). Das funktioniert prima, aber ich möchte meine eigenen Fehlerseiten definieren (404, 500 usw.) und dass diese von nginx und nicht von Tomcat bereitgestellt werden. Ich habe beispielsweise die folgende Ressource:
https://domain.com/resource
die nicht existiert. Wenn ich diese URL [GET], erhalte ich von Tomcat und nicht von nginx die Meldung „Nicht gefunden“.
Ich möchte, dass nginx jedes Mal, wenn Tomcat mit einer 404-Fehlermeldung (oder einer anderen Fehlermeldung) antwortet, selbst eine Nachricht an den Benutzer sendet: eine für nginx zugängliche HTML-Datei.
Die Konfiguration meines Nginx-Servers ist ganz einfach:
location / {
proxy_pass http://localhost:8080/<webapp-name>/;
}
Und ich habe Port 8080, also Tomcat, so konfiguriert, dass er von außerhalb dieser Maschine nicht zugänglich ist.
Ich glaube nicht, dass die Verwendung unterschiedlicher location
Anweisungen in der Nginx-Konfiguration funktioniert, da einige Ressourcen von der URL abhängen:
https://domain.com/customer/<non-existent-customer-name>/[GET]
Gibt immer 404 (oder eine andere Fehlermeldung) zurück, während:
https://domain.com/customer/<existent-customer>/[GET]
Gibt alles andere als 404 (der Kunde existiert) zurück.
Gibt es eine Möglichkeit, Tomcat-Fehlermeldungen (Anwendungsserver) mit Nginx (HTTP-Server) zu übermitteln? Um die von der proxy_pass
Direktive gesendete Nachricht zu überprüfen und entsprechend zu reagieren?
Antwort1
Ok, ich habe es gefunden. Im server
Abschnitt der Nginx-Site-Konfiguration, den ich verwende:
error_page 404 /404.html;
location = /404.html {
root /var/www/nginx;
}
location / {
proxy_pass http://localhost:8080/api/;
proxy_intercept_errors on;
}
Sie müssen proxy_intercept_errors on
für nginx hinzufügen, umfang sie ab. Nginx fängt nur die Fehler ab, die Sie mit definiert haben error_page
.