在两个不同的端口上运行Tomcat服务器
我想部署一个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文件中的服务标签内
- 我们必须改变端口号。像8080〜80
- 我们必须redirectPort变化没有像8443至8444
- 我们要像卡特琳娜更改引擎名称Catalina_2
- 我们要改变的appBase名称,如web应用到webapps_1
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