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

时间:2019-02-05 01:22:26

标签: java apache jsp tomcat catalina

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

我习惯于apache2虚拟主机。我想要在tomcat上进行相同的设置。一个文件夹属于每个网站。我已经弄清楚了如何使用print(str(datetime.datetime.today().isocalendar()[0]) + '/W' + str(datetime.datetime.today().isocalendar()[1])) 2019/W6 创建虚拟主机,并且每个站点都有多个文件夹,但是我不知道如何将war文件部署到每个虚拟主机的根目录。

部署war文件时,将有一个servers.xml文件和一个名为second.war的空白目录。当我去看该站点时,我必须去http://example.com:8080/second去看它。我不需要在URL中输入second。我该如何解决?我不是Java程序员,而正在编译Java的人是JSP初学者。

这是我在second中的房东:

servers.xml

2 个答案:

答案 0 :(得分:0)

Scary Wombat在评论中给出了答案。使用Apache设置反向代理,效果很好!

答案 1 :(得分:0)

tl; dr

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

端口80受限制

  

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

Unix-like operating systems(macOS,BSD,Linux,Solaris等)中,出于安全目的,低于1024的端口号具有受限制的访问权限。 Java的默认设置是安全的,因此(据我所知)没有任何方法可以访问这些端口。因此,所有Java服务器的默认数量都介于1024至64,000个限制之间。 Tomcat的默认设置为8080,默认为http://www.StackOverflow.com/,因为它可爱地重复了80(Web应用程序的常用端口)。

每个Web浏览器默认使用该端口80,并向用户隐藏该事实。因此,像http://www.StackOverflow.com:80/这样的URL等效于像nil这样具有明确端口号的URL。

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

端口转发⏩

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

我们想要的修改是将端口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服务器,这完全是另一回事。