2013-03-05 108 views
39

我想部署一個tomcat服務器,以便它同時在兩個端口上偵聽(均爲http協議)。在兩個不同的端口上運行Tomcat服務器

只是爲了確保您理解這個要求correclty,我們只有一個服務器實例,但希望在兩個端口上偵聽HTTP協議。例如,任何人都可以使用端口號7080和8080訪問部署在我的服務器中的應用程序。是否可以這樣做?如果可能,我們如何實現這一目標?

+0

Stranegly如果我測試它正在工作的端口8080,7080。如果我用80和8080測試它是失敗的。想知道爲什麼? – Narendra 2013-03-05 18:40:08

+0

端口80已被別的東西使用,例如可能是Apache Web Servier。 – Magnilex 2013-03-05 18:41:21

+1

是的你是對的。由於一些奇怪的原因,我的Skype使用這個端口80.一旦我殺了我的Skype進程,服務器運行良好。 感謝您的回答。 – Narendra 2013-03-05 18:45:58

回答

39

這很簡單,你只需要看看conf/server.xml配置文件,併爲你想要的端口添加一個新的連接器。例如,如果你有這樣的連接器:

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

只需添加一個像這樣的新連接器,但改變了端口參數。就這些了,重啓,你就完成了。

+1

java.lang.Exception:套接字綁定失敗:[730048]通常只允許使用每個套接字地址(協議/網絡地址/端口)。 – Narendra 2013-03-05 18:30:52

+2

@Narendra:你是否改變了參數「端口」和「redirectPort」?你正在使用哪個tomcat版本? – Magnilex 2013-03-05 18:31:53

+0

我發現我不需要改變'redirectPort'參數,只要我使用了不同的'port'值。 – 2016-05-16 07:25:49

19

是的,這是可能的,我只是自己測試。只需編輯server.xml中(位於名爲conf文件夾)是這樣的:

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

這將安裝Tomcat來聽兩個端口和。

2

您可以在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

我收到以下錯誤:java.lang.Exception:Socket綁定失敗:[730048]通常只允許使用每個套接字地址(協議/網絡地址/端口)。 – Narendra 2013-03-05 18:30:36

+0

您是否將端口從81更改爲您的要求。 – 2013-03-05 18:37:06

+0

這不起作用我在我的控制檯中收到很多異常,聲稱java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:未能初始化組件[StandardEngine [sample] .StandardHost [m yhostname] .StandardContext [null ]] ................. 引起:org.apache.catalina.LifecycleException:子容器在啓動過程中失敗 – Narendra 2013-03-05 18:48:24

1

請務必哪個用戶正在運行Tomcat的,因爲如果你想使用它的任何特權端口,則必須使用它在root用戶下。

你可以做的另一件事是用iptables將端口80重定向到8080。 事情是這樣的:

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

希望它可以幫助

+1

我不認爲這回答這個問題... – 2014-02-20 16:20:18

+1

我不明白爲什麼不。 也許他需要使用1024以下的其他端口,並以端口7080爲例。 其他答案也是有效的,這是另一種方法。 – Cyberzoo 2014-02-25 18:47:21

+1

我喜歡這個答案,因爲它也提到了潛在的解決方案,其中iptables是一種有效的方法,並且編輯預先配置的服務器不是(我有一個不恰當的Docker化應用程序,它有一個問題可以簡潔地解決) – tjborromeo 2014-09-12 04:10:57

11

可以在/conf/server.xml定義2個不同的服務。

的例子如下,

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

注意:您可能需要增加tomcat的堆大小。

1

在不同的端口運行tomcat。我們必須改變四件事server.xml文件中的服務標籤內

  1. 我們必須改變端口號。像8080〜80
  2. 我們必須redirectPort變化沒有像8443至8444
  3. 我們要像卡特琳娜更改引擎名稱Catalina_2
  4. 我們要改變的appBase名稱,如web應用到webapps_1
相關問題