【问题标题】:Tomcat and multiple domains/applicationsTomcat 和多个域/应用程序
【发布时间】:2022-01-14 21:23:01
【问题描述】:

目前我在端口 80 上运行单个 WAR 应用程序的单个 tomcat。域名 www.foo.org 指向此服务器 ip。

在 80 端口为不同的客户端添加 www.bar.org 域的过程是什么?

谢谢

【问题讨论】:

    标签: tomcat


    【解决方案1】:

    从一开始,您的 conf/server.xml 中有一个“主机”记录,用于localhost

    <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>
    

    现在您可以添加另一个“主机”记录,例如

      <Host name="anotherclient.com"  appBase="anotherclient" unpackWARs="true" autoDeploy="true">
    
           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="anotherclient_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    

    其中name="anotherclient.com" 是新客户端的域,appBase="anotherclient" 是它的 Web 应用程序根目录名称(您部署战争的位置);它是相对于 tomcat 主目录的。

    tomcat 重启后将接受更改。

    去往任何其他域(server.xml 中未列出)但指向您服务器的 IP 地址的请求将被传递给默认应用程序,它在 Engine 元素中指定

    <Engine name="Catalina" defaultHost="localhost">
    

    【讨论】:

    • 这是否意味着原始 foo.org 网站的战争在 /opt/tomcat/webapps/ROOT.war,然后新的 bar.org 网站在 /opt/tomcat/anotherclient/ROOT.war
    • @CodeMed 是的,这是正确的。我自己也试过了,这样的 WAR 似乎对我有用。
    • 我们必须自己创建另一个客户端的目录,或者它是在重启tomcat7后创建的
    • 没有war 的空目录不会很有用,因此只需创建它并在那里部署您的war。然后重启tomcat。
    • @Axel 我在 tomcats server.xml 中有几个主机。每个看起来像这样: 像这样我将一个 url 映射到一个应用程序,都在“webapps”下。
    【解决方案2】:

    在其默认配置中,Tomcat 接受对任何主机名的请求,并将它们全部发送到 conf/server.xml 中定义的“localhost”。如果您没有更改它,那么您所要做的就是确保为两个主机名都设置了 DNS 记录以指向您的服务器。

    如果您想为每个主机名设置不同的 webapps,那么您必须在 conf/server.xml 中定义第二个 并为其使用适当的主机名。 (请注意,您始终必须有一个“默认”主机,所有请求都不会匹配任何明确定义的主机)。

    您可以在此处阅读 的文档:http://tomcat.apache.org/tomcat-7.0-doc/config/host.html(适用于 Tomcat 7.0.x。您没有提及您的版本,所以我给了您一个指向最新版本文档的链接)。

    【讨论】:

    • 谢谢 - 它的版本 7,WAR 文件呢?每个客户端都需要不同的部署?
    • @user648026 每个 都有自己的 appBase,因此您可以选择将 WAR 文件放入其中一个或两个中。选择一个将使该 WAR 文件只能使用该 的主机名访问,而将 WAR 文件放在两者中意味着您将在同一个容器中同时运行 webapp 的两个副本:一个用于一台主机,一个用于另一个。
    • 因此,在端口 80 上运行的单个 tomcat 可以使用单个 WAR 处理同一端口 (80) 上的多个主机,使用多个“主机”配置。
    【解决方案3】:

    通常你有一个tomcat(或其他应用程序服务器)的端口不同于80(如8080或7001或任何你想要的)。 之后,您在端口 80 上放置一个 Web 服务器(如 apache http 服务器)并配置一个或多个连接器以指向具有不同地址的不同应用程序服务器上的不同端口。

    对于 Apache http + tomcat 你可以看看这个链接:

    http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

    【讨论】:

    • 没有特别的理由在 OP 的环境中添加另一个产品:这个问题可以单独使用 Tomcat 来解决。
    • 在专业环境中拥有网络和应用服务器只是一个最佳实践。
    • Malarkey:Tomcat 是一个完全可以接受的 Web 服务器。称某事为“最佳实践”并不能使其成为最佳实践。这是一种 /common/ 做法,但肯定不是“最佳”做法。
    • 运行 Apache + Tomcat 以将流量从端口 80 转发到 8080 的另一种替代方法是使用 NAT 表并将来自端口 80 的所有流量转换为端口 8080。即使 Apache 速度很快,NAT 也更快而且它已经是 iptables 的一部分(我假设你的服务器是 linux)。
    猜你喜欢
    • 2018-09-09
    • 2014-01-13
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2011-01-11
    • 2012-03-18
    相关资源
    最近更新 更多