2013-03-05 8 views
39

Desidero distribuire un server tomcat in modo che sia in ascolto su due porte contemporaneamente (entrambe per il protocollo http).Esecuzione del server Tomcat su due porte diverse

Solo per essere sicuri di aver compreso questo requisito, abbiamo solo un'istanza del server ma vogliamo ascoltare su due porte per il protocollo HTTP. Ad esempio, chiunque può accedere alle applicazioni distribuite nel mio server utilizzando i numeri di porta 7080 e 8080

È possibile farlo? Se possibile, come possiamo ottenere questo?

+0

Stranegly Se Ho provato con le porte 8080,7080 che sta funzionando. Se lo provo con 80 e 8080 non funziona. Chiedersi perché? – Narendra

+0

La porta 80 era già utilizzata da qualcos'altro, ad esempio un Apache Web Servier. – Magnilex

+1

Sì, hai ragione. Per qualche strana ragione, il mio Skype utilizza questa porta 80. Una volta ucciso il mio processo Skype, il server funziona correttamente. Grazie per la risposta. – Narendra

risposta

39

è molto semplice, è sufficiente dare un'occhiata al file di configurazione conf/server.xml e aggiungere un nuovo connettore per la porta desiderata. Per esempio se hai un connettore del genere:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      URIEncoding="UTF-8" /> 

Basta aggiungere un nuovo connettore come quello, ma modificando il parametro della porta. Questo è tutto, riavvia e il gioco è fatto.

+1

java.lang.Exception: binding socket non riuscito: [730048] È consentito un solo utilizzo di ciascun indirizzo socket (protocollo/indirizzo di rete/porta). – Narendra

+2

@Narendra: hai modificato sia il parametro "port" che "redirectPort"? Quale versione di tomcat stai usando? – Magnilex

+0

Ho scoperto che non dovevo modificare il parametro 'redirectPort', a condizione che usassi valori diversi' port'. –

19

Sì, è possibile, l'ho appena provato da solo. Basta modificare server.xml (che si trova nella cartella denominata conf) come questo:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
<Connector port="8081" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8444" /> 

Questa configurazione di Tomcat per ascoltare entrambe le porte e .

2

è possibile specificare il seguente codice nel tuo server.xml

<Service name="sample"> 

    <Connector port="81" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="2000"/> 

    <Engine name="sample" defaultHost="sample"> 
     <Host name="myhostname" appBase="webapp2"> 
      <Context docBase="C:\websites\sample\" /> 
     </Host> 
    </Engine> 

</Service> 
+0

Viene visualizzato l'errore seguente: java.lang.Exception: binding socket non riuscito: [730048] È consentito un solo utilizzo di ciascun indirizzo socket (protocollo/indirizzo/porta di rete). – Narendra

+0

hai cambiato la porta da 81 al tuo requisito. –

+0

Questo non funziona Sto ricevendo molte eccezioni nella mia console dicendo java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Impossibile inizializzare il componente [StandardEngine [campione] .StandardHost [m yhostname] .StandardContext [null ]] ................. Causato da: org.apache.catalina.LifecycleException: un contenitore secondario non è riuscito durante l'avvio – Narendra

1

prega, essere sicuro su quale utente è in esecuzione Tomcat, dal momento che se si desidera utilizzare su qualsiasi porta privilegiata, è necessario utilizzare sotto l'utente root.

Un'altra cosa che puoi fare è reindirizzare la porta 80-8080 con iptables. Qualcosa di simile a questo:

iptables -t nat -A PREROUTING -d 192.168.10.16 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

Speranza che aiuta

+1

Non penso che risponda a questa domanda ... –

+1

Non vedo perché no. Forse aveva bisogno di usare un'altra porta sotto il 1024 e aveva appena dato la porta 7080 come esempio. Altre risposte anche se valide, e questo è un altro approccio. – Cyberzoo

+1

Mi piace questa risposta, in quanto parla anche di potenziali soluzioni in cui iptables sono un approccio valido e la modifica di un server preconfigurato non lo è (ho un'app Dockerized impropria che ha un problema che risolve in modo succinto) – tjborromeo

11

È possibile definire 2 diversi servizi in /conf/server.xml.

L'esempio è come sotto,

<Service name="Catalina_2"> 
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" /> 
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" /> 
    <Engine name="Catalina_2" defaultHost="localhost"> 
     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
     </Realm> 
     <Host name="localhost" appBase="webapps_2" unpackWARs="true" autoDeploy="true"> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
       prefix="localhost_access_log." suffix=".txt" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
     </Host> 
    </Engine> 
    </Service> 


    <Service name="Catalina"> 
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
     </Realm> 
     <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
       prefix="localhost_access_log." suffix=".txt" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
     </Host> 
    </Engine> 
    </Service> 

Nota: Potrebbe essere necessario per aumentare la dimensione heap Tomcat.

1

tomcat in esecuzione in porta diversa. Dobbiamo cambiare quattro cose dentro tag di servizio di file server.xml

  1. dobbiamo cambiare la porta n.come 8080-80
  2. dobbiamo cambiare redirectPort non come 8443-8444
  3. dobbiamo cambiare il nome del motore come Catalina a Catalina_2
  4. dobbiamo cambiare nome AppBase come webapps per webapps_1