Nginx-Konfiguration zur direkten Übergabe der Site an die Tomcat-Webanwendung mit Kontext

tl; dr version

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?

Tomcat-Setup

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 Setup

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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage