Configurer nginx pour jboss / tomcat

26

Afin de transmettre le trafic vers JBoss / TomCat sur le port 80 en utilisant 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.

Kev
la source
Vous pouvez consulter mon article de blog sur la configuration de Nginx en tant que proxy inverse pour Tomcat . Cela peut être intéressant pour vous, car l'exemple comprend quelques modifications supplémentaires en tant que contenu de mise en cache uniquement pour les utilisateurs non connectés et redirection pour différentes langues.
Vladimir Grichina

Réponses:

17

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 que le trafic du 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 module Fairstream Fair qui enverra du trafic vers le serveur backend 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;
  }
}
Ryan Cox
la source
3

Une autre façon de le faire est décrite dans la page wiki de 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 de belles URL mappées par un framework MVC comme Struts.

Marc Climent
la source
2

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 également fonctionner.

skaffman
la source
7
Le problème avec un proxy est qu'il est plus lent que mod_jk / fastcgi / ajp
Adam Gent
2

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 possède un module proxy général qui peut gérer l'encodage 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

eckes
la source