我想部署一个tomcat服务器,使其同时监听两个端口(都是http协议)。
为了确保您正确理解这一要求,我们只有一个服务器实例,但想要侦听 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 来监听端口 8080 和 8081。
文档指出:
端口: 此连接器将在其上创建服务器套接字并等待传入连接的 TCP 端口号。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口用于该连接器。这通常仅在嵌入式和测试应用程序中有用。
redirectPort: 如果此连接器支持非 SSL 请求,并且收到匹配的
<security-constraint>
需要 SSL 传输的请求,Catalina 会自动将请求重定向到此处指定的端口号。因此,更改重定向端口是可选的,具体取决于您希望此类重定向如何工作。
您可以在 /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 堆大小。
您可以在 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>
请确定您正在哪个用户上运行 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
希望有帮助
在不同端口运行tomcat。我们必须更改 server.xml 文件的服务标签内的四件事
如何访问上例中Catalina_2服务中部署的应用程序?