web-dev-qa-db-fra.com

Configurer nginx pour jboss / tomcat

Afin de transmettre le trafic à JBoss/Tomcat sur le port 80 à l'aide d'Apache, nous avons utilisé pour installer et configurer mod_jk.

Existe-t-il un équivalent pour nginx? Vous voulez essentiellement que tout le trafic du port 80 soit transmis à jboss.

26
user76328

Pour nginx, consultez leurs documents ici . La prise en charge du proxy est intégrée.

Dans l'exemple ci-dessous à partir de leur site, vous verrez qu'un trafic de port 80 spécifique est envoyé à un conteneur de servlet unique fonctionnant sur le port 8080.

Notez que si vous souhaitez exécuter plusieurs conteneurs de servlet backend (pour l'équilibrage de charge, la mise à l'échelle, etc ...), vous devez regarder le pstream Fair Module qui enverra du trafic vers le serveur principal le moins occupé. Il n'est pas expédié par défaut avec 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;
  }
}
17
Ryan Cox

Une autre façon de le faire comme décrit dans la page 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;
    }
}

Je l'ai également testé avec/myapp au lieu de root et fonctionne également, en mettant location/myapp et proxypass http: // myapp: 8080/myapp ;

De plus, cette configuration mappe tout à l'application Java, ce qui est utile lorsque vous avez des URL Nice mappées par un framework MVC comme Struts.

3
Marc Climent

Il y a maintenant un ajp_module assez frais pour nginx . Je n'ai pas d'expérience avec cela, mais je pense que l'adhérence de la session et en particulier les connexions backend persistantes sont très utiles pour Tomcat. Les deux méthodes (proxy http ou proxy ajp) sont malheureusement inflexibles pour les requêtes de longue durée (comète) ou les transferts de fichiers volumineux (téléchargements).

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

lighttpd BTW a un module proxy général qui peut gérer le codage FCGI, HTTP, CGIS et AJP13. Cela ressemble à une meilleure approche (mais je pense qu'à la lecture, il a les mêmes limites en ce qui concerne les modèles de demande/réponse longs/volumineux atypiques).

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

2
eckes

Vous n'avez pas besoin d'utiliser mod_jk, vous pouvez utiliser mod_proxy, c'est-à-dire passer le trafic via HTTP au lieu d'AJP. Si nginx a une capacité de proxy, cela devrait tout aussi bien fonctionner.

2
skaffman