繁体   English   中英

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

[英]Deploy WAR files for Apache Tomcat for multiple domains

我想在端口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>

恐怖的袋熊在评论中给出了答案。 使用Apache设置反向代理,效果很好!

TL;博士

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

端口80受限制🚫

我想在端口80上运行一个Web服务器。在我阅读的所有地方,Apache Tomcat都在8080上运行。谁想在其URL中使用它? 所以我的第一个问题是在哪里增加端口号?

类似Unix的操作系统 (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到Tomcat的显式端口来打扰我们的用户。 如何解决Catch-22的问题 ,其中Web浏览器希望默认使用端口80,但是基于Java的服务器(例如Tomcat)无法在端口80上侦听? 常见的解决方案称为端口转发

港口转运⏩

大多数类似Unix的操作系统都带有称为包过滤器防火墙工具。 通过这种工具,可以检查,过滤甚至修改通过网络传输到服务器计算机中的每个数据包。

我们要进行的修改是将端口80上传入的任何传入数据包重定向到Tomcat正在侦听的端口8080。 通过这种方法,我们可以更改网络流量,而无需Tomcat知道,也完全不需要对Tomcat做任何事情。 Web浏览器和Web服务器都不会知道发生了什么事,它们仍然幸福无知。 浏览器发出发往端口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服务器,这完全是另一回事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM