Configurar nginx para jboss / tomcat

26

Para pasar el tráfico a JBoss / TomCat en el puerto 80 usando Apache, solíamos instalarlo y configurarlo mod_jk.

¿Hay un equivalente para nginx? Básicamente, quiero que todo el tráfico del puerto 80 pase a jboss.

Kev
fuente
Puede consultar mi publicación de blog sobre la configuración de Nginx como proxy inverso para Tomcat . Puede ser interesante para usted, ya que el ejemplo incluye algunos ajustes adicionales como el almacenamiento en caché de contenido solo para usuarios no registrados y la redirección para diferentes idiomas.
Vladimir Grichina

Respuestas:

17

Para nginx revisa sus documentos aquí . El soporte de proxy está integrado.

En el siguiente ejemplo de su sitio, verá que el tráfico específico del puerto 80 se envía a un único contenedor de servlet que se ejecuta en el puerto 8080.

Tenga en cuenta que si desea ejecutar varios contenedores de servlets de back-end (para el equilibrio de carga, el escalado, etc.), debe mirar el Upstream Fair Module que enviará el tráfico al servidor de back-end menos ocupado. No se envía por defecto con 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
fuente
3

Otra forma de hacerlo como se describe en la página 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;
    }
}

También lo he probado con / myapp en lugar de root y funciona también, colocando location / myapp y proxypass http: // myapp: 8080 / myapp ;

Además, esta configuración asigna todo a la aplicación Java, lo cual es útil cuando tiene URL agradables que están asignadas por un marco MVC como Struts.

Marc Climent
fuente
2

No tiene que usar mod_jk, puede usar mod_proxy, es decir, pasar el tráfico a través de HTTP en lugar de AJP. Si nginx tiene la capacidad de proxy, eso debería funcionar igual de bien.

skaffman
fuente
77
El problema con un proxy es que es más lento que mod_jk / fastcgi / ajp
Adam Gent el
2

Ahora hay un ajp_module bastante nuevo para nginx . No tengo experiencia con eso, pero creo que la rigidez de la sesión y especialmente las conexiones persistentes de back-end son bastante útiles para Tomcat. Ambos métodos (proxy http o proxy ajp) son lamentablemente inflexibles para consultas de larga duración (cometa) o transferencias de archivos grandes (cargas).

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

lighttpd BTW tiene un módulo proxy general que puede manejar la codificación FCGI, HTTP, CGIS y AJP13. Este parece un mejor enfoque (pero creo que al leerlo tiene las mismas limitaciones con respecto a los patrones de solicitud / respuesta largos / grandes no típicos).

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

eckes
fuente