Nginx-Konfiguration zur direkten Übergabe der Site an die Tomcat-Webanwendung mit Kontext
Wie richten Sie ein?nginx
als Reverse Proxy fürexample.com
zu einem lokal laufendentomcat
webapp beihttp://127.0.0.1:8080/blah/
ohne das zu brechenpageContext
?
Es gibt eineKater 7 Web-App,blah
, eingesetzt mit einem.war
Datei und sitzen in/var/lib/tomcat7/webapps/blah/
.
tomcat
läuft lokal und erreichbar unterhttp://127.0.0.1:8080
. Es werden mehrere Webapps ausgeführt, auf die zugegriffen werden kann über:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
Hafen8080
wird extern von der Firewall blockiert.
nginx
läuft auf dem Server als Gatekeeper. Eine Site kann auf alle oben genannten lokalen Tomcat-Webanwendungen zugreifen. Das funktioniert gut fürexample.com
:
server {
listen 80;
server_name example.com;
root /var/lib/tomcat/webapps/ROOT/;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}
Frage: Wie konfiguriere ich eine zusätzliche Site für den Zugriff?blah
direkt?Unter/etc/nginx/sites-enabled/
Eine zusätzliche Site-Datei ist für die Weiterleitung eingerichtethttp://blah.com
zuhttp://127.0.0.1:8080/blah/
aber es gibt Probleme.
server {
listen 80;
server_name blah.com *.blah.com;
root /var/lib/tomcat/webapps/blah/;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/blah/;
}
}
Dieses Setup fügt eine zusätzliche hinzublah
zum Kontextpfad, Erstellen eines404
Seite weil Pfad/blah/blah/
gibt es nicht, was Sinn macht. Gibt es einen einfachen Weg nach innen?nginx
bestehenblah.com
zum webapp root?
Innerhalb der Webapp verwende ich${pageContext.request.contextPath}/path
für relative Pfade zur Webapp-Ressource. Ich dachte, dies sei die richtige Art, mit internen Tomcat-Pfaden umzugehen, aber könnte dies Teil des Problems sein? Ich glaube, das ist der Grund, warum ich das Extra bekommeblah
in der Route erstellen die404
Seite.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0; url=${pageContext.request.contextPath}/form">
<script type="text/javascript">
window.location.href = "${pageContext.request.contextPath}/form"
</script>
<title>Load BLAH</title>
</head>
<body>
<p>If you are not redirected automatically, follow this <a href="${pageContext.request.contextPath}/form">link</a>.</p>
</body>
</html>
Diese Seite ist in Ordnung, aber die Weiterleitung geht an/blah/blah/form
anstatt/blah/form
wo das Servlet tatsächlich existiert.
Ich habe auch andere Ansätze ausprobiert, einschließlich des Zeigensblah.com
an die Katerwurzel selbst. Dies funktioniert in dem Sinne, wie Sie es erreichen könnenblah
überblah.com/blah/
aber das wollen wir eigentlich nicht.
Darüber hinaus ist es völlig akzeptabel (und erwünscht), weiterhin zugreifen zu könnenblah
überexample.com/blah/
.
Offensichtlich ist dies für einenginx
Anfänger, aber hilf mir (und zukünftigen Anfängern), das zu klären, weil die klare Lösung mir und dem entgehtnginx
Die Dokumentation verwendet auch die Hilfe.