AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 740534
Accepted
We are Borg
We are Borg
Asked: 2015-12-04 05:48:15 +0800 CST2015-12-04 05:48:15 +0800 CST 2015-12-04 05:48:15 +0800 CST

Apache webserver & Tomcat:同时运行多个 tomcat webapps 和 apache webserver app

  • 772

我们有一个 Debian X64 服务器,它目前有一个 tomcat 实例,其中我们有 3 个webapps文件WAR。此外,我们有一个 Apache 网络服务器,它运行着一个 CMS 系统。最后一个项目是Maintenancewebapp,当我们在服务器上工作并且服务不可用时会显示它。

我们面临的问题是:

  1. Tomcat 或 Apache Web 服务器中只有一个始终在端口 80 上运行。
  2. 对于 Tomcat 应用程序,必须通过它们不同的上下文路径来访问这些应用程序。
  3. 我们无法在多个域名下运行所有​​内容,而是在单个服务器下运行。

我长期想做的事情:

  1. 使用 Tomcat(首选)或 Apache Web 服务器作为负载平衡器,它将根据域名中继请求。所以,如果有人在调用 url www.xyz.com,那么它应该调用XYZ我们拥有的 webapp。相同的 webapp 名称和域名纯属巧合。
  2. 将Maintenancewebapp 绑定到整个网格,当任何域不活动、没有响应或忙时都会调用它。

我创建了一张图片(一张可怕的.. :-( ),它更形象地解释了这项任务。

在此处输入图像描述

正如您现在可以看到的架构,这是/是我的问题。

  1. 这是一个好方法吗?如果没有,请告诉我在哪里以及我可以做得更好。
  2. 我正在尝试做的任务,它叫什么?网格配置,负载平衡?
  3. 如何将所有 webapps、网站联系在一起,这些网站可以通过不同的 URL 引用,但会指向正确的 webapp 或网站。
  4. 我对 Apache tomcat 和 Linux 管理有很好的了解,而不是 Apache 网络服务器。任何人都可以帮助我解决这个问题,一些计划和我需要什么,所以我可以执行它。

请注意,我们在 DNS 中为所有基于 webapps 和 webserver 的网站注册了域名。

我希望我已经添加了足够的信息,如果有任何需要,请告诉我。你能帮忙的话,我会很高兴。非常感谢。:-)

linux
  • 2 2 个回答
  • 2021 Views

2 个回答

  • Voted
  1. Fredi
    2015-12-04T07:25:17+08:002015-12-04T07:25:17+08:00

    考虑到您只有一个 IP 和一台服务器,我会:

    使用基于名称的虚拟主机在端口 80 上放置一个 apache 实例侦听(因为您只有一个 IP,如果您打算使用 HTTPS,请注意最终的 SSL 问题,请在此处查看:https ://wiki.apache.org/httpd/NameBasedSSLVHosts )

    因此,您将为每个子域拥有一个虚拟主机,假设您的域是 example.com,您将拥有:

    www.app1.com
    [...]
    www.appN.com
    
    cms.example.com
    maintenance.example.com
    

    在管理应用程序子域的虚拟主机上,您可以根据需要使用 mod_jk、mod_proxy_ajp 或 mod_proxy_http 配置反向代理。我会为tomcat选择mod_jk。

    有了这个,你就解决了 3 个问题。

    这也涵盖了您的第一个长期计划,第二个:

    将维护 webapp 绑定到整个网格,当任何域不活动、没有响应或忙碌时都会调用它。

    您可以通过多种方式做到这一点。例如,使用 Apache 上的 500 / 503 错误的自定义错误页面重定向到您的 maintenace.example.com。这可能是它自己的问题

    至于你的最后一个问题:

    1 这是一个好方法吗?如果没有,请告诉我在哪里以及我可以做得更好。

    我想我也涵盖了这个

    2 我正在尝试做的任务,它叫什么?网格配置,负载平衡?

    虚拟主机(最终负载平衡,见后文)

    3 如何将所有 webapps、网站联系在一起,这些网站可以通过不同的 URL 引用,但会指向正确的 webapp 或网站。

    这是由 Apache 虚拟主机和代理处理的。您甚至可以重写,因此您不必在 url 中使用上下文路径。这也可能是它自己的问题。

    4 我对 Apache tomcat 和 Linux 管理有很好的了解,而不是 Apache webserver。任何人都可以帮助我解决这个问题,一些计划和我需要什么,所以我可以执行它。

    我想我也涵盖了这个。

    旁注,我会使用至少两个 tomcat,但更好的是,每个应用程序使用两个 tomcat。至少有两个,这样你就可以在 Tomcat 死机的情况下得到保障。每个应用程序两个,因此您可以让您的应用程序彼此隔离(在不同的 JVM 中运行)。如果出现 ecc 问题,这非常方便指向特定的应用程序。

    希望这可以帮助。

    • 3
  2. Best Answer
    We are Borg
    2015-12-09T00:31:11+08:002015-12-09T00:31:11+08:00

    我终于能够通过将其更改为以下配置来解决此问题:

    Tomcat 的 server.xml :

     <Connector port="8080" proxyPort="80" redirectPort="443" protocol="HTTP/1.1" compression="force" compressionMinSize="1024" 
                   connectionTimeout="20000"  maxPostSize="5242880"
                   URIEncoding="utf-8"
     compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>
    
    
     <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"  maxPostSize="5242880" SSLEnabled="true" maxThreads="200" compr$
                  compressionMinSize="1024" scheme="https" secure="true" clientAuth="false"  sslProtocol="TLS"
                   keystoreFile="keystore.jks" keystorePass="PASSWORD" URIEncoding="utf-8"
     compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>
    
      <Connector port="8010" protocol="AJP/1.3" redirectPort="80" URIEncoding="utf-8"
     compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
    />
        <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat">
       // Multiple webapps hosted
        </Engine>
    

    在 jk.conf 中添加了这个:

    <IfModule jk_module>
            JkWorkersFile   /PATH/to/workers.properties
            JkLogFile       /var/log/apache2/mod_jk.log
            JkLogLevel      notice
            JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
            JkOptions       +ForwardURIProxy
            JkMountFile     /path/to/uriworkermap.properties
    </IfModule>
    

    worker.properties:

     worker.list = worker_app1
    worker.worker_app1.type = lb
    worker.worker_app1.balance_workers = app1_instance1
    worker.worker_app1.sticky_session = true
    worker.worker_app1.sticky_session_force = false
    worker.worker_app1.method = busyness
    
    worker.app1_instance1.type = ajp13
    worker.app1_instance1.host = 127.0.0.1
    worker.app1_instance1.port = 8010
    worker.app1_instance1.host = localhost
    worker.app1_instance1.lbfactor = 1
    worker.app1_instance1.socket_timeout = 40
    worker.app1_instance1.socket_keepalive = true
    worker.app1_instance1.reply_timeout = 30000
    

    uriworkermap.properties:

    /|/* = worker_app1;
    

    将此添加000-default到sites-enabled

    // This is the tomcat domain. 
    <VirtualHost *:80>
    ServerName www.domain_tomcat_webapp.de
    ServerAlias domain_tomcat_webapp.de
    ProxyRequests on
    ProxyPreserveHost On
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    
    <Location / >
    Order allow,deny
    Allow from all
    </Location>
    </VirtualHost>
    

    就是这样。然后我启动了tomcat并重新启动了Apache网络服务器,它现在可以工作了。

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve