47

我想部署一个 tomcat 服务器,使其同时侦听两个端口(均用于 http 协议)。

只是为了确保您正确理解此要求,我们只有一个服务器实例,但想在两个端口上侦听 HTTP 协议。例如,任何人都可以使用端口号 7080 和 8080 访问部署在我的服务器中的应用程序

有可能这样做吗?如果可能的话,我们怎样才能做到这一点?

4

6 回答 6

48

这很简单。您只需要查看conf/server.xml配置文件即可为您想要的端口添加新的连接器。例如,如果您有这样的连接器:

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

只需在配置文件中添加与上述相同的新连接器,但更改端口参数。就这样。重新启动,你就完成了。

于 2013-03-05T18:15:56.700 回答
22

是的,有可能。只需像这样编辑 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 监听80808081端口。

文档指出:

  • port:此连接器将在其上创建服务器套接字并等待传入​​连接的 TCP 端口号。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口用于此连接器。这通常仅在嵌入式和测试应用程序中有用。

  • redirectPort:如果此连接器支持非 SSL 请求,并且接收到匹配<security-constraint>需要 SSL 传输的请求,Catalina 将自动将请求重定向到此处指定的端口号。

因此,更改 redirectPort 是可选的,具体取决于您希望这样的重定向如何工作。

于 2013-03-05T18:15:52.083 回答
18

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

于 2014-12-24T09:32:42.403 回答
4

您可以在 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>
于 2013-03-05T18:22:55.160 回答
3

请确定您在哪个用户上运行 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-20T16:00:35.610 回答
3

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

  1. 我们必须更改端口号。比如8080到80
  2. 我们必须将 redirectPort no like 8443 更改为 8444
  3. 我们必须将像 Catalina 这样的引擎名称更改为 Catalina_2
  4. 我们必须将 appBase 名称(如 webapps)更改为 webapps_1
于 2015-07-15T10:09:08.003 回答