2012-01-11 23 views
50

Actualmente tengo 2 aplicaciones web app1 y app2 se ejecuta en Tomcat 6:¿Cómo ejecutar diferentes aplicaciones en una sola instancia de Tomcat detrás de diferentes puertos?

Quiero configurar Tomcat para que se ejecuten en el contexto raíz detrás puertos separados:

Lo que hay que hacer?

+0

yo no creo que es posible a menos que tenga otro caso, he upvoted, vamos a ver si tienen cualquier otro pensamiento. – kosa

+0

Realmente quiero usar solo una instancia de tomcat. Nuestro equipo está tratando de usar una sola instancia en el futuro. Hay algo en el server.xml que necesita cambiar. Escuché pero no estoy seguro de qué hacer allí. – DeeStackOverflow

Respuesta

43

Creo que puede configurar eso en su servidor .xml archivo y poner 2 servicios:

<Service name="app1"> 
    <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Host name="localhost" appBase="app1" 
     unpackWARs="true" autoDeploy="true"> 
     </Host> 
    </Engine> 
</Service> 
<Service name="app2"> 
    <Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Host name="localhost" appBase="app2" 
     unpackWARs="true" autoDeploy="true"> 
     </Host> 
    </Engine> 
</Service> 
+0

Lo anterior parece dar mejores resultados con el registro pero todavía tiene este error: 11 de enero de 2012 12:58:13 PM org.apache.catalina.core.StandardContext resourcesStart SEVERE: Error al iniciar Recursos estáticos java.lang.IllegalArgumentException: Base de documentos C: \ Archivos de programa \ Tomcat6 \ app1 \ host-manager no existe o no es un directorio legible \t en org.apache.naming.resources.FileDirContext.setDocBase (FileDirContext. java: 142) – DeeStackOverflow

+0

Voy a marcar esto como una respuesta aceptada; aunque no pude conseguir que los mensajes de error se fueran, al menos pude hacer que Tomcat comenzara. Si alguien tiene tiempo para resolver esto, por favor déjenos saber sus resultados. La otra opción, por supuesto, es tener 2 instancias de Tomcat ejecutándose como lo señalaron otros en este hilo. – DeeStackOverflow

+1

Docs están diciendo que cada motor dentro servidor específico debe tener nombre único (http://tomcat.apache.org/tomcat-7.0-doc/config/engine.html) así que votan por @speeves responder – Kangur

0

Usa dos instancias de Tomcat diferentes.

EDIT:

o configurar Tomcat como se explica en la respuesta de esta pregunta: Tomcat configuration help: multiple ports not responding

+0

Probé la sugerencia en el enlace (básicamente, agregué un nuevo Servicio y un conector dentro). No funcionó. Mi appBase no es C: \ somepath - la aplicación se implementa en webapps. Entonces, ¿qué sería la aplicación? – DeeStackOverflow

+0

¿Cómo desea tener dos aplicaciones con el mismo nombre (ROOT) en la misma carpeta? Debe separar las carpetas utilizadas por los dos servicios de tomcat. Consulte la documentación de tomcat para más detalles. –

+0

que tienen carpetas para cada aplicación desplegada como esto: [tomcathome]/webapps/app1 y [tomcathome]/webapps/app2. El server.xml predeterminado me permite llamarlos como localhost: 8080/app1 y localhost: 8080/app2. He copiado el appconfig.xml como app1.xml en [tomcathome]/conf/Catalina/localhost. – DeeStackOverflow

0

Tomcat se ejecuta en los puertos especificados en:

$CATALINA_HOME/conf/server.xml 

Como escribió JB Nizet, configuración de dos diferentes instancias de tomcat, y configure el valor de puerto server.xml apropiadamente.

$ CATALINA_HOME/tomcat-8081/conf/server.xml:

<?xml version='1.0' encoding='utf-8'?> 
<Server port="8081" ... > 
    ... 
</Server> 

$ CATALINA_HOME/tomcat-8082/conf/server.xml:

<?xml version='1.0' encoding='utf-8'?> 
<Server port="8082" ... > 
    ... 
</Server> 
+0

¿Puedo modificar server.xml para agregar 2 nuevos puertos y apuntarlos a cada una de las aplicaciones en webapps? – DeeStackOverflow

+0

No queremos crear 2 instancias de tomcat. Aquí las personas ejecutan dos aplicaciones diferentes dentro de la misma instancia de tomcat y comparten bibliotecas. Solo quiero extenderlo más asignando números de puerto. – DeeStackOverflow

2

Además de correr dos instancias de Tomcat y utilizando la aplicación ROOT (que ya se ha dicho y es una solución poco eficaz e ineficaz) puede lograrlo utilizando Apache + Tomcat. Configuración de Apache para escuchar ambos puertos y reenviar por IP: Puerto a diferentes aplicaciones de Tomcat. ¡Pero necesitas un puerto diferente por Tomcat! configuración

Apache

listen 8080,8081 
... 
<VirtualHost *:8080> 
    ServerName localhost 
    ProxyPass/http://localhost:8888/app1 
    ProxyPassReverse/http://localhost:8080/app1 
</VirtualHost> 

<VirtualHost *:8081> 
    ServerName localhost 
    ProxyPass/http://localhost:8888/app2 
    ProxyPassReverse/http://localhost:8080/app2 
</VirtualHost> 

o

listen 80,81 
... 
<VirtualHost *:80> 
    ServerName localhost 
    ProxyPass/http://localhost:8080/app1 
    ProxyPassReverse/http://localhost:8080/app1 
</VirtualHost> 

<VirtualHost *:81> 
    ServerName localhost 
    ProxyPass/http://localhost:8080/app2 
    ProxyPassReverse/http://localhost:8080/app2 
</VirtualHost> 
+0

El problema es que no tengo apache instalado y no hay planes en nuestro equipo para hacerlo. – DeeStackOverflow

+0

En una posición anterior, ejecutamos el Big-Ip F5s directamente en tomcat para eliminar un punto de falla. Me encanta _do_ Apache para muchas cosas aunque :) – speeves

+1

Esto es teóricamente posible, pero la correspondencia entre "/" y "/ app1" te vuelve loco. Por lo general, el "mod_proxy_html" es necesario también para dicha configuración, y es bastante sofisticado tanto para la instalación como para la configuración. Incluso si usted está usando Apache, el uso de dos servicios en la configuración de Tomcat es aún más conveniente, pero camino. – 30thh

8

Otro ejemplo de conectores añadiendo:

<Service name="reciver"> 
    <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="10" 
       enableLookups="false" acceptCount="100" 
       connectionTimeout="10000" disableUploadTimeout="true" 
       useBodyEncodingForURI="true"/> 
    <Engine name="reciver" defaultHost="localhost" jvmRoute="host1"> 
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
        resourceName="UserDatabase" /> 
      <Host name="localhost" appBase="webapps" unpackWARs="true" 
        autoDeploy="false" xmlValidation="false" 
        xmlNamespaceAware="false"> 
        <Context docBase="browser" path="/browser" reloadable="false"/> 
      </Host> 
    </Engine> 
</Service> 
<Service name="reciver2"> 
    <Connector port="8081" maxHttpHeaderSize="8192" maxThreads="10" 
       enableLookups="false" acceptCount="1" 
       connectionTimeout="10000" disableUploadTimeout="true" 
       useBodyEncodingForURI="true" proxyName="example.pt" proxyPort="80"/> 
    <Engine name="reciver2" defaultHost="example_app" jvmRoute="host2"> 
      <Host name="example_app" appBase="test_app/example_app" unpackWARs="true" 
        autoDeploy="false" xmlValidation="false" 
        xmlNamespaceAware="false"> 
        <Context docBase="example_app" path="/example_app" reloadable="false"/> 
      </Host> 
    </Engine> 
</Service> 
(...Repeted 2 more times.) 

Tomado de: http://www.coderanch.com/t/84172/Tomcat/listen-multiple-ports

I r Ecommend leer todo el hilo, ya que habla sobre el rendimiento hits con esta configuración, y también posibles condiciones de carrera.

+0

Esto me ayudó. Muy agradable :) – rocksteady

+1

Esta respuesta ha funcionado mejor para mí ya que quería un conjunto independiente de registros, separada Catalina/localhost/*. Xml contextos, AppBase separada. Pedí un para obtener registros separados – djb

Cuestiones relacionadas