为多个域部署Apache Tomcat的WAR文件

问题描述 投票:2回答:2

我希望在端口80上运行一个Web服务器。我读到的每个地方,Apache Tomcat都运行在8080.谁想在他们的URL中拥有它?所以我的第一个问题是我在哪里改变端口号?我是在一个地方更换它吗?

我习惯了apache2虚拟主机。我想在tomcat上进行相同的设置。文件夹属于每个网站。我已经弄清楚如何使用servers.xml创建虚拟主机并为每个站点提供多个文件夹,但我无法弄清楚如何将war文件部署到每个虚拟主机的根目录。

部署war文件时,有一个second.war文件,并且有一个名为second的空白目录。当我去看网站时,我必须去http://example.com:8080/second看看。我不想在URL中输入second。我该如何解决这个问题?我不是Java程序员,编译Java的人是初学者JSP开发人员。

这是我在servers.xml的主持人:

  <Host name="example.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
      <Alias>www.example2.com</Alias>

      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="example_com_app_access_log" suffix=".txt"
       pattern="%h %l %u %t %r %s %b" />

     <Context path="" docBase="/opt/tomcat/webapps/example_com"
       debug="0" reloadable="true"/>
  </Host>
java apache jsp tomcat catalina
2个回答
0
投票

可怕的袋熊在评论中得到了答案。使用Apache设置反向代理,效果很好!


0
投票

tl;dr

对于侦听端口8080以接收来自端口80上的Web浏览器的请求的Tomcat,请在主机操作系统上使用数据包筛选器工具来更改传入网络数据包的端口号。此过程称为端口转发。

Port 80 is restricted 🚫

我希望在端口80上运行一个Web服务器。我读到的每个地方,Apache Tomcat都运行在8080.谁想在他们的URL中拥有它?所以我的第一个问题是我在哪里改变端口号?

Unix-like operating systems(macOS,BSD,Linux,Solaris等)中,低于1024的端口号出于安全目的限制访问。 Java默认是安全的,所以没有任何方式(我知道)访问这些端口。因此,所有Java服务器默认为1024之间的某个数字,约为64,000。 Tomcat默认为8080,因其可爱的重复80(Web应用程序的常用端口)而被任意选择。

每个Web浏览器都默认使用该端口80,并将该事实隐藏起来。所以像http://www.StackOverflow.com/这样的URL相当于一个带有明确端口号的URL,如http://www.StackOverflow.com:80/

正如您所建议的那样,我们通常不希望使用像8080这样的显式端口来欺骗我们的用户。如何解决这个Catch-22,其中Web浏览器要默认为端口80但是基于Java的服务器(如Tomcat)无法侦听端口80?常见的解决方案称为port-forwarding

Port-forwarding ⏩

大多数类Unix操作系统都附带一个称为firewallpacket-filter工具。通过网络传输到服务器机器中的每个数据包都可以通过这样的工具进行检查,过滤甚至修改。

我们想要的修改是将进入端口80的任何传入数据包重定向到Tomcat正在侦听的端口8080。在这种方法中,我们改变了网络流量,没有Tomcat知道,也没有对Tomcat做任何事情。网络浏览器和网络服务器都不知道发生了什么事情,两者都仍然无知。浏览器发出寻址到端口80的请求,并且Web服务器(Tomcat,Jetty等)接收那些现在修改的请求进入端口8080。

我看到的数据包过滤工具都以相同的方式工作:您指定一个规则列表。每个规则指定一个条件,如果满足该条件将导致采取行动。每个数据包将逐个与规则进行比较。订购规则列表,每个规则都有一个指定的编号。匹配数据包的第一个规则获胜,并采取其操作,而忽略列表中的其余规则。因此,我们需要设置一条规则,说明“如果此数据包在端口80上进入,则将端口更改为8080,并让它继续运行”。

简单的想法。不幸的是,每个数据包过滤工具都有自己的语法用于这些规则。您将需要搜索哪个数据包过滤器最适合您的操作系统,因为一些较旧的工具已经消失,被更新的工具所取代。然后,您需要了解该工具规则的语法。幸运的是,您可以轻松找到要复制的示例代码段,因为Web服务器的端口转发端口80非常常见。

请注意,大多数数据包筛选器仅为当前工作会话维护其规则。当托管操作系统的计算机重新启动时,数据包筛选器将返回其默认设置,而不添加您的规则。您可以在每次重新启动后手动添加端口转发规则,也可以找到适合您的特定数据包筛选器工具的方法来学习规则,以便在重新启动后自动应用该规则。

警告:我上面的讨论假设您使用Apache Tomcat作为Web服务器以及JSP / Servlet引擎。你提到了Apache HTTP Server。如果您在Apache HTTP Server后面使用Tomcat,那么Tomcat仅作为JSP / Servlet引擎而不是Web服务器,这完全是另一种情况。

© www.soinside.com 2019 - 2024. All rights reserved.