在两个不同的端口上运行Tomcat服务器

在两个不同的端口上运行Tomcat服务器

问题描述:

我想部署一个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

这很简单,你只需要看看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

是的,这是可能的,我只是自己测试。只需编辑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> 
+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

请务必哪个用户正在运行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

可以在/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的堆大小。

在不同的端口运行tomcat。我们必须改变四件事server.xml文件中的服务标签内

  1. 我们必须改变端口号。像8080〜80
  2. 我们必须redirectPort变化没有像8443至8444
  3. 我们要像卡特琳娜更改引擎名称Catalina_2
  4. 我们要改变的appBase名称,如web应用到webapps_1