【问题标题】:Mapping address to multiple tomcat instances映射地址到多个tomcat实例
【发布时间】:2012-02-16 19:58:47
【问题描述】:

我在 Windows Server 2008 机器上运行了 3 个 tomcat 实例。每个人都有一个应用程序:

如何配置我的服务器以映射没有端口号的地址?

是tomcat配置还是DNS什么的?

谢谢。


好的,我尝试了以下方法:

  • 设置 Apache 2.2
  • 配置 httpd.conf 加载代理模块
  • 并添加代理模块配置:

    ProxyRequests Off
    ProxyPass /app1 http://machine:8081/app
    ProxyPassReverse /app1 http://machine:8081/app
    
    <Location "/app">
      Order allow,deny
      Allow from all
    </Location>
    

现在重定向在机器本地运行良好。但是当我尝试从同一网络中的另一台机器访问时它不起作用。 (这另一台机器可以 ping 'machine' 主机。我也尝试输入 ip 号)。

【问题讨论】:

    标签: apache tomcat hosting ip


    【解决方案1】:

    例如,您可以使用 nginx (http://nginx.org/en/docs/) 作为代理。

    尝试简单(无负载平衡等):

        server {
    
        listen here.your.ip:80/YourApp;
    
        location / {
            root /path/to/your/webapp;
            proxy_pass http://host:8080/YourApp;
        }
    
    }
    

    其他端口也一样

    【讨论】:

    • 不错的提示@Stugal。我正在尝试安装和配置 [wiki.apache.org/httpd/TomcatReverseProxy](TomcatReverseProxy).我配置了一个从 localhost/app 到 localhost:8080/app/ 的重定向,但是我发生了这个错误:Service Temporarily Unavailable 由于维护停机,服务器暂时无法为您的请求提供服务或容量问题。请稍后再试。 当我直接访问目标时,它可以工作。当我输入像 google.com 这样的目标值时,它也可以工作。
    • 页面底部有一条注释wiki.apache.org/httpd/TomcatReverseProxy使用默认的 Tomcat 设置,您将在 Tomcat 管理器页面中出现断开的链接。了解如何使用 mod_proxy_html 修复它们。它可能也会影响其他页面。我现在正在验证它。
    【解决方案2】:

    在 Apache 后面使用多个 Tomcat 来进行负载平衡是很常见的。虽然这不是负载平衡,但原理是相同的。您将拥有 3 个应用程序,每个应用程序都有 1 个 Tomcat 工作程序,而不是一个应用程序具有 3 个负载平衡的 Tomcat 工作程序。

    您可以在此处找到 tomcat 文档:http://tomcat.apache.org/connectors-doc/

    【讨论】:

    • 我们安装了一个带有 3 个实例的 tomcat,因为存在一些内存泄漏问题。实际上,我们使用 1.6g 的堆内存运行每个实例,这是 32 位 jvm 中的最大值。所以,暂时,我们需要分离java进程。一旦我们在不同的端口有 3 个实例,如何为每个实例设置一个友好的标签?主机/应用程序1、主机/应用程序2和主机/应用程序3?
    • 那么这3个应用程序实际上是同一个应用程序?你的问题不清楚。在这种情况下,这确实是负载平衡,浏览器只是连接到 Apache 映射到后面的 Tomcat 之一的主机/应用程序。客户端不知道哪个 Tomcat 服务于他们的请求。根据您的应用程序,可能需要粘性会话。
    • 是的,它们是同一个应用程序。这是一个为 5 个客户提供服务的应用程序。但是其中2个消耗大量资源导致tomcat内存泄漏。直接的解决方案是增加 tomcat 堆大小的内存,但这还不够(因为 1.6g 的限制)。所以我们决定将巨大的客户端隔离在另一个tomcat进程中,另外1.6的内存空间和另一个端口号。但是新的 tomcat 实例的地址为host:8081/app2,我们希望配置一个别名,例如host/app2。主要目标是使host/app2 = host:8081/app2
    【解决方案3】:

    httpd 中的以下代码上尝试mod proxy configuration

    ProxyPass           /app0   http://localhost:8080/app0/
    ProxyPassReverse    /app0   http://localhost:8080/app0/
    ProxyPass           /app1   http://localhost:8081/app1/
    ProxyPassReverse    /app1   http://localhost:8081/app1/
    ProxyPass           /app2   http://localhost:8082/app2/
    ProxyPassReverse    /app2   http://localhost:8082/app2/
    

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2023-03-03
      • 2015-05-04
      • 2012-02-18
      相关资源
      最近更新 更多