我想部署一個tomcat服務器,以便它同時在兩個端口上偵聽(均爲http協議)。在兩個不同的端口上運行Tomcat服務器
只是爲了確保您理解這個要求correclty,我們只有一個服務器實例,但希望在兩個端口上偵聽HTTP協議。例如,任何人都可以使用端口號7080和8080訪問部署在我的服務器中的應用程序。是否可以這樣做?如果可能,我們如何實現這一目標?
我想部署一個tomcat服務器,以便它同時在兩個端口上偵聽(均爲http協議)。在兩個不同的端口上運行Tomcat服務器
只是爲了確保您理解這個要求correclty,我們只有一個服務器實例,但希望在兩個端口上偵聽HTTP協議。例如,任何人都可以使用端口號7080和8080訪問部署在我的服務器中的應用程序。是否可以這樣做?如果可能,我們如何實現這一目標?
這很簡單,你只需要看看conf/server.xml配置文件,併爲你想要的端口添加一個新的連接器。例如,如果你有這樣的連接器:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
只需添加一個像這樣的新連接器,但改變了端口參數。就這些了,重啓,你就完成了。
是的,這是可能的,我只是自己測試。只需編輯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來聽兩個端口和。
您可以在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>
我收到以下錯誤:java.lang.Exception:Socket綁定失敗:[730048]通常只允許使用每個套接字地址(協議/網絡地址/端口)。 – Narendra 2013-03-05 18:30:36
您是否將端口從81更改爲您的要求。 – 2013-03-05 18:37:06
這不起作用我在我的控制檯中收到很多異常,聲稱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
請務必哪個用戶正在運行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
希望它可以幫助
我不認爲這回答這個問題... – 2014-02-20 16:20:18
我不明白爲什麼不。 也許他需要使用1024以下的其他端口,並以端口7080爲例。 其他答案也是有效的,這是另一種方法。 – Cyberzoo 2014-02-25 18:47:21
我喜歡這個答案,因爲它也提到了潛在的解決方案,其中iptables是一種有效的方法,並且編輯預先配置的服務器不是(我有一個不恰當的Docker化應用程序,它有一個問題可以簡潔地解決) – tjborromeo 2014-09-12 04:10:57
可以在/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 "%r" %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 "%r" %s %b" />
</Host>
</Engine>
</Service>
注意:您可能需要增加tomcat的堆大小。
在不同的端口運行tomcat。我們必須改變四件事server.xml文件中的服務標籤內
Stranegly如果我測試它正在工作的端口8080,7080。如果我用80和8080測試它是失敗的。想知道爲什麼? – Narendra 2013-03-05 18:40:08
端口80已被別的東西使用,例如可能是Apache Web Servier。 – Magnilex 2013-03-05 18:41:21
是的你是對的。由於一些奇怪的原因,我的Skype使用這個端口80.一旦我殺了我的Skype進程,服務器運行良好。 感謝您的回答。 – Narendra 2013-03-05 18:45:58