2013-03-05 20 views
39

Bir tomcat sunucusunu aynı anda iki bağlantı noktasında dinleyebilecek şekilde dağıtmak istiyorum (her ikisi de http protokolü için).Tomcat sunucusunu iki farklı bağlantı noktasında çalıştırma

Yalnızca bu gereksinimi düzeltmeyi anladığınızdan emin olmak için, yalnızca tek bir sunucu örneğimiz var ancak HTTP protokolü için iki bağlantı noktasında dinlemek istiyoruz. Örneğin, sunucumda dağıtılan uygulamalara herhangi bir kişi, 7080 ve 8080

port numaralarını kullanarak erişebilir. Bunu yapmak mümkün mü? Mümkünse bunu nasıl sağlayabiliriz?

+0

webapps_1 için webapps gibi AppBase adını değiştirmek zorunda

  • Catalina_2
  • Catalina'ya gibi Motor adını değiştirmek zorunda Ben çalışıyor 8080,7080 portları ile test ediyorum. 80 ve 8080 ile test edersem başarısız olur. Nedenini merak etmek? – Narendra

    +0

    Bağlantı noktası 80 zaten başka bir şey tarafından kullanılıyordu, örneğin bir Apache Web Servier olabilir. – Magnilex

    +1

    Evet haklısınız. Bazı garip nedenlerden dolayı Skype'ım bu bağlantı noktasını kullanıyor 80. Skype işlemimi öldürdüğümde sunucu iyi çalışıyor. Cevabınız için teşekkür ederiz. – Narendra

    cevap

    39

    Çok basit, sadece conf/server.xml yapılandırma dosyasına bir göz atmanız ve istediğiniz bağlantı noktası için yeni bir bağlayıcı eklemeniz gerekiyor. Örneğin belirli bir bağlayıcı böyle varsa:

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

    Aynen böyle yeni bir bağlayıcı eklemek, ancak liman parametresini değiştirerek. Hepsi bu, yeniden başlat ve işin bitti.

    +1

    java.lang.Exception: Soket bağlantısı başarısız oldu: [730048] Normalde her bir soket adresinin (protokol/ağ adresi/bağlantı noktası) bir kullanımına izin verilir. – Narendra

    +2

    @Narendra: "Port" ve "redirectPort" parametrelerini değiştirdiniz mi? Hangi tomcat sürümünü kullanıyorsunuz? – Magnilex

    +0

    Farklı "bağlantı noktası" değerleri kullanmış olmama rağmen "redirectPort" parametresini değiştirmek zorunda kalmadım. –

    19

    Evet, bunu kendim denedim. Böyle (klasör adında conf bulunur) Sadece düzenlemek server.xml:

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

    Bu irade kurulum Tomcat hem limanlarda ve 8081dinlemek için.

    2

    Eğer

    <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

    Şu hatayı alıyorum: java.lang.Exception: Socket bind başarısız oldu: [730048] Normalde her bir soket adresinin (protokol/ağ adresi/bağlantı noktası) bir kullanımına izin verilir. – Narendra

    +0

    bağlantı noktasını 81'den gereksiniminize göre değiştirdiniz. –

    +0

    Bu çalışmıyor benim konsolumda java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException diyerek birçok özel durum alıyorum Bileşen başlatılamadı [StandardEngine [sample] .StandardHost [m yhostname] .StandardContext [null ]] ................. Caused by: org.apache.catalina.LifecycleException: – Narendra

    1

    , emin olunuz sizin server.xml aşağıdaki kodu belirtebilirsiniz hangi herhangi ayrıcalıklı noktası üzerinde kullanmak istiyorsanız, bunu kullanmak gerekir beri, Tomcat çalıştıran kullanıcı root kullanıcısı altında.

    Yapabileceğiniz başka bir şey de 80 ile 8080 numaralı bağlantı noktalarını iptables ile yeniden yönlendirmektir. Böyle şey:

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

    Bunu /conf/server.xml 2 farklı hizmetler tanımlayabilirsiniz

    +1

    Bu sorunun cevabını sanmıyorum ... –

    +1

    Neden göremiyorum. Belki de 1024'ün altında başka bir port kullanması gerekiyordu ve örnek olarak port 7080'i verdiler. Diğer cevaplar da geçerli, ve bu başka bir yaklaşım. – Cyberzoo

    +1

    İptables'lerin geçerli bir yaklaşım olduğu ve önceden yapılandırılmış bir sunucuyu düzenleyen olası çözümler olmadığı için bu cevabı beğeniyorum. (Bu sorunun çözüldüğü bir sorunu olan yanlış bir Docker uygulaması var) – tjborromeo

    11

    yardımcı olur. örnek olarak altındadır

    ,

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

    Not: Sen erkek kedi yığın boyutunu artırmak için gerekli olabilir. Farklı bağlantı noktasında tomcat'i çalıştıran

    1

    . Biz

    biz port hiçbir değiştirmek zorunda

    1. server.xml dosyasının hizmet etiketinin içinde dört şeyi değiştirmek zorunda.hiçbir 8443 gibi 8444
    2. için redirectPort değiştirmek zorunda 8080
    3. 80 gibi biz Stranegly Eğer
    İlgili konular