Konfiguriere nginx für jboss / tomcat

26

Um den Datenverkehr mit Apache über Port 80 an JBoss / TomCat weiterzuleiten, haben wir diese installiert und konfiguriert mod_jk.

Gibt es ein Äquivalent für Nginx? Grundsätzlich soll der gesamte Datenverkehr für Port 80 an jboss übergeben werden.

Kev
quelle
Sie können meinen Blog-Beitrag zur Konfiguration von Nginx als Reverse-Proxy für Tomcat lesen . Dies kann für Sie interessant sein, da beispielsweise nur für nicht angemeldete Benutzer und für die Umleitung für verschiedene Sprachen einige zusätzliche Änderungen als Caching-Inhalt enthalten sind.
Vladimir Grichina

Antworten:

17

Für Nginx Checkout ihre Dokumente hier . Proxy-Unterstützung ist eingebaut.

In dem folgenden Beispiel auf ihrer Site sehen Sie, dass spezifischer Datenverkehr für Port 80 an einen einzelnen Servlet-Container gesendet wird, der auf Port 8080 ausgeführt wird.

Wenn Sie mehrere Back-End-Servlet-Container ausführen möchten (zum Lastenausgleich, zur Skalierung usw.), sollten Sie sich das Upstream Fair-Modul ansehen , das Datenverkehr an den am wenigsten ausgelasteten Back-End-Server sendet. Es wird nicht standardmäßig mit Nginx ausgeliefert.

server {
  listen          80;
  server_name     YOUR_DOMAIN;
  root            /PATH/TO/YOUR/WEB/APPLICATION;
  location / {
    index index.jsp;
  }
  location ~ \.do$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }                                                                                                       
  location ~ \.jsp$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
  location ^~/servlets/* {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
}
Ryan Cox
quelle
3

Eine andere Möglichkeit, es so zu machen, wie es auf der LikeApache- Wiki-Seite beschrieben ist.

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        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://myapp:8080;
    }
}

Ich habe es auch mit / myapp anstelle von root getestet und funktioniert auch mit location / myapp und proxypass http: // myapp: 8080 / myapp ;

Außerdem ordnet diese Konfiguration alles der Java-Anwendung zu. Dies ist hilfreich, wenn Sie nette URLs haben, die von einem MVC-Framework wie Struts zugeordnet werden.

Marc Climent
quelle
2

Sie müssen nicht mod_jk verwenden, sondern können mod_proxy verwenden, dh den Datenverkehr über HTTP anstelle von AJP weiterleiten. Wenn Nginx Proxy-Fähigkeit hat, sollte das genauso gut funktionieren.

Skaffman
quelle
7
Das Problem mit einem Proxy ist, dass es langsamer ist als mod_jk / fastcgi / ajp
Adam Gent
2

Es gibt jetzt eine ziemlich frisch ajp_module für nginx . Ich habe keine Erfahrung damit, aber ich denke, dass die Sitzungsstabilität und insbesondere die beständigen Back-End-Verbindungen für Tomcat sehr hilfreich sind. Beide Methoden (http proxy oder ajp proxy) sind leider unflexibel für Langzeitanfragen (comet) oder große Dateiübertragungen (uploads).

https://github.com/yaoweibin/nginx_ajp_module#readme

lighttpd BTW verfügt über ein allgemeines Proxy-Modul, das FCGI-, HTTP-, CGIS- und AJP13-Codierung verarbeiten kann. Dies sieht nach einem besseren Ansatz aus (aber ich denke, dass es beim Lesen die gleichen Einschränkungen in Bezug auf untypische lange / große Anforderungs- / Antwortmuster gibt).

http://redmine.lighttpd.net/wiki/1/Docs:ModProxyCore

eckes
quelle