Frage Konfigurieren Sie nginx für jboss / tomcat


Um Traffic auf JBoss / TomCat auf Port 80 mit Apache zu übertragen, haben wir installiert und konfiguriert mod_jk.

Gibt es ein Äquivalent für nginx? Im Grunde wollen alle Port 80 Traffic an jboss übergeben werden.


26
2017-11-17 05:36


Ursprung


Sie können meinen Blogbeitrag auf überprüfen Konfigurieren von Nginx als Reverseproxy für Tomcat. Es kann für Sie interessant sein, da das Beispiel einige zusätzliche Optimierungen enthält, wie das Zwischenspeichern von Inhalten nur für nicht angemeldete Benutzer und das Umleiten für verschiedene Sprachen. - Vladimir Grichina


Antworten:


Für nginx checken Sie ihre Dokumente Hier. Proxy-Unterstützung ist eingebaut.

Im folgenden Beispiel sehen Sie auf der Site, dass ein bestimmter Port 80-Verkehr an a gesendet wird Single Servlet-Container, der auf Port 8080 ausgeführt wird.

Beachten Sie, dass wenn Sie ausführen möchten mehrere Backend - Servlet - Container (zum Lastenausgleich, Skalierung, etc ...) sollten Sie sich die Upstream-Messe-Modul Dadurch wird Datenverkehr an den am wenigsten ausgelasteten Back-End-Server gesendet. Es wird nicht per defaul w / 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;
  }
}

17
2017-11-17 13:08





Eine andere Möglichkeit, es zu tun, wie es in beschrieben ist LikeApache Wiki-Seite.

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 placing / myapp und proxypass http: // myapp: 8080 / myapp;

Außerdem weist diese Konfiguration alles der Java-Anwendung zu, was nützlich ist, wenn Sie nette URLs haben, die von einem MVC-Framework wie Struts zugeordnet werden.


3
2017-12-20 11:58





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


2
2017-11-17 08:22



Das Problem mit einem Proxy ist, dass es langsamer ist als mod_jk / fastcgi / ajp - Adam Gent


Es gibt jetzt ein ziemlich frisches ajp_modul für nginx. Ich habe keine Erfahrung damit, aber ich denke, die Session-Stickyness und vor allem die persistenten Backend-Verbindungen sind sehr hilfreich für Tomcat. Beide Methoden (HTTP-Proxy oder AJP-Proxy) sind leider für lang laufende Abfragen (Comet) oder große Dateiübertragungen (Uploads) unflexibel.

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

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

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


2