2013-03-05 14 views
39

Ich möchte einen Tomcat-Server bereitstellen, so dass er zwei Ports gleichzeitig abhört (beide für HTTP-Protokoll).Tomcat-Server an zwei verschiedenen Ports ausführen

Nur um sicherzustellen, dass Sie diese Anforderung korrekt verstehen, haben wir nur eine Serverinstanz, möchten jedoch zwei Ports für das HTTP-Protokoll abhören. Zum Beispiel kann jeder auf Anwendungen zugreifen, die in meinem Server mit den Portnummern 7080 und 8080 implementiert sind.

Ist es möglich, das zu tun? Wenn möglich, wie können wir dies erreichen?

+0

Stranegly webapps_1 Wenn Ich teste mit Ports 8080,7080 es funktioniert. Wenn ich es mit 80 und 8080 teste, schlägt es fehl. Wundern, warum? – Narendra

+0

Der Port 80 wurde bereits von etwas anderem benutzt, könnte beispielsweise ein Apache Web Servier sein. – Magnilex

+1

Ja, Sie haben Recht. Aus irgendeinem seltsamen Grund verwendet mein Skype diesen Port 80. Sobald ich meinen Skype-Prozess beendet habe, läuft der Server gut. Danke für Ihre Antwort. – Narendra

Antwort

39

es ist sehr einfach, Sie müssen nur einen Blick in die Konfigurationsdatei conf/server.xml werfen und einen neuen Konnektor für den gewünschten Port hinzufügen. Wenn Sie zum Beispiel haben ein Verbinder wie folgt aus:

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

Fügen Sie einfach einen neuen Connector so, aber die Port-Parameter zu verändern. Das ist alles, starten Sie und Sie sind fertig.

+1

java.lang.Exception: Socket-Bindung fehlgeschlagen: [730048] Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll/Netzwerkadresse/Port) zulässig. – Narendra

+2

@Narendra: Haben Sie sowohl den Parameter "port" als auch den "redirectPort" geändert? Welche Tomcat-Version verwendest du? – Magnilex

+0

Ich fand, dass ich den 'redirectPort' Parameter nicht ändern musste, vorausgesetzt ich benutzte verschiedene' port' Werte. –

19

Ja, es ist möglich, ich habe es gerade selbst getestet. Nur bearbeiten server.xml (im Ordner mit dem Namen conf) wie folgt aus:

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

Dies wird Setup Tomcat auf beiden Ports und hört.

2

können Sie den folgenden Code in Ihrer server.xml angeben

<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

Ich erhalte folgenden Fehler: java.lang.Exception: Socket-Bindung fehlgeschlagen: [730048] Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll/Netzwerkadresse/Port) zulässig. – Narendra

+0

haben Sie den Port von 81 auf Ihre Anforderung geändert. –

+0

Das funktioniert nicht Ich bekomme viele Ausnahmen in meiner Konsole, die java.util.concurrent.ExecutionException sagt: org.apache.catalina.LifecycleException: Fehler beim Initialisieren der Komponente [StandardEngine [Beispiel] .StandardHost [m yhostname] .StandardContext [null ]] ................. verursacht durch: org.apache.catalina.LifecycleException: Ein untergeordneter Container ist beim Start fehlgeschlagen – Narendra

1

Stellen Sie bitte sicher, auf dem Benutzer, den Sie Tomcat ausgeführt werden, da, wenn Sie es auf jedem privilegierten Port verwenden möchten, können Sie es verwenden müssen, unter dem Benutzer root.

Eine andere Sache, die Sie tun können, ist Port 80 zu 8080 mit iptables umleiten. Etwas wie folgt aus:

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

Hoffe, dass es

+1

Ich glaube nicht, dass diese Antwort diese Frage ... –

+1

Ich sehe nicht, warum nicht. Vielleicht musste er einen anderen Port unter 1024 verwenden und gab nur Port 7080 als Beispiel. Andere Antworten waren auch gültig, und dies ist ein anderer Ansatz. – Cyberzoo

+1

Ich mag diese Antwort, da es auch zu möglichen Lösungen spricht, wo Iptables ein gültiger Ansatz sind und einen vorkonfigurierten Server nicht bearbeiten (ich habe eine unsachgemäß dockerte App, die ein Problem damit löst) – tjborromeo

11

hilft können Sie zwei verschiedene Dienste in /conf/server.xml definieren.

Das Beispiel ist als unten,

<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> 

Hinweis: Sie benötigt haben die tomcat Heap-Größe zu erhöhen.

1

Tomcat in verschiedenen Port ausgeführt. Wir müssen vier Dinge in Service-Tag server.xml

  1. wir ändern müssen keine Port-Datei ändern.wie 8080-80
  2. wir redirectPort nicht wie 8443-8444
  3. müssen wir Motor Namen wie Catalina Catalina_2
  4. wir Namen ändern müssen, wie Webapps appBase ändern sich ändern müssen
Verwandte Themen