Skonfiguruj nginx dla jboss / tomcat

26

Aby przekazać ruch do JBoss / TomCat na porcie 80 za pomocą Apache, użyliśmy do instalacji i konfiguracji mod_jk.

Czy istnieje odpowiednik nginx? Zasadniczo chcę, aby cały ruch z portu 80 był przekazywany do jboss.

Kev
źródło
Możesz sprawdzić mój post na blogu na temat konfigurowania Nginx jako odwrotnego proxy dla Tomcat . Może to być dla Ciebie interesujące, ponieważ przykład zawiera kilka dodatkowych poprawek, takich jak buforowanie treści tylko dla niezalogowanych użytkowników i przekierowywanie w różnych językach.
Vladimir Grichina

Odpowiedzi:

17

W przypadku kasy nginx ich dokumenty tutaj . Obsługa proxy jest wbudowana.

W poniższym przykładzie z ich strony zobaczysz, że określony ruch portu 80 jest wysyłany do pojedynczego kontenera serwletu działającego na porcie 8080.

Pamiętaj, że jeśli chcesz uruchomić wiele kontenerów serwletów zaplecza (w celu równoważenia obciążenia, skalowania itp.), Powinieneś spojrzeć na Upstream Fair Module , który wyśle ​​ruch do najmniej obciążonego serwera zaplecza. Nie jest wysyłany przez defaul w / nginx.

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
źródło
3

Innym sposobem, aby to zrobić, jest opisany na stronie wiki LikeApache .

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;
    }
}

Testowałem go również z / myapp zamiast root i działa również, umieszczając lokalizację / myapp i proxyypass http: // myapp: 8080 / myapp ;

Również ta konfiguracja odwzorowuje wszystko na aplikację Java, co jest przydatne, gdy masz ładne adresy URL, które są odwzorowane przez środowisko MVC, takie jak Struts.

Marc Climent
źródło
2

Nie musisz używać mod_jk, możesz użyć mod_proxy, tzn. Przepuszczać ruch przez HTTP zamiast AJP. Jeśli nginx ma możliwość proxy, to powinno działać równie dobrze.

skaffman
źródło
7
Problem z serwerem proxy polega na tym, że jest on wolniejszy niż mod_jk / fastcgi / ajp
Adam Gent
2

Istnieje teraz całkiem nowy ajp_module dla nginx . Nie mam z tym doświadczenia, ale myślę, że lepkość sesji, a zwłaszcza trwałe połączenia zaplecza są bardzo pomocne dla Tomcat. Obie metody (serwer proxy HTTP lub serwer proxy ajp) są niestety mało elastyczne w przypadku długich zapytań (kometa) lub przesyłania dużych plików (przesyłanie).

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

lighttpd BTW ma ogólny moduł proxy, który obsługuje kodowanie FCGI, HTTP, CGIS i AJP13. To wygląda na lepsze podejście (ale myślę, że po przeczytaniu ma takie same ograniczenia w odniesieniu do nietypowych długich / dużych wzorców zapytań / odpowiedzi).

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

eckes
źródło