Apache webserver&Tomcat:同时运行多个tomcat webapps和apache webserver应用程序

我们有一个Debian X64服务器,当前有一个tomcat实例,我们在WAR文件中有3个webapps 。 另外,我们有一个Apache web服务器,它有一个CMS系统运行。 最后一个项目是Maintenance Web应用程序,当我们在服务器上工作并且服务不可用时显示。

我们面临的问题是:

  1. Tomcat或Apache Web服务器中只有一个始终在Port-80上运行。
  2. 对于Tomcat应用程序,应用程序必须通过不同的上下文path进行访问。
  3. 我们无法在多个域名下运行所有​​内容,但在单个服务器下运行。

我想长期做的事情是:

  1. 使用Tomcat(首选)或Apache Web服务器作为负载平衡器,它将根据域名来中继请求。 所以,如果有人打电话给url www.xyz.com ,那么它应该调用我们拥有的XYZ webapp。 相同的webapp名称和域名是纯粹的偶然事件。
  2. Maintenance Web应用程序绑定到整个网格,当任何域不活动或没有响应或忙碌时将会调用该网格。

我创造了一个图片(一个可怕的.. :-(),这更多地说明了这个任务。

在这里输入图像说明

正如你现在看到的架构,这里是我的问题。

  1. 这是一个好方法吗? 如果没有,请告诉我在哪里,我可以做得更好。
  2. 我正在做的任务是什么? 网格configuration,负载平衡?
  3. 如何将所有的webapps,网站绑定在一起,可以通过不同的URL来引用,但会指向正确的webapp或网站。
  4. 我对Apache Tomcat和Linuxpipe理有很好的理解,而不是那么多的Apache Web服务器。 任何人都可以帮助我解决这个问题,一些规划和我所需要的,所以我可以执行它。

请注意,我们在DNS中注册了所有基于Web的应用程序和基于Web服务器的网站的域名。

我希望我已经添加了足够的信息,如果有任何要求,请让我知道。 你能帮忙的话,我会很高兴。 非常感谢。 🙂

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

把一个apache实例用基于名字的虚拟主机监听端口80(因为你只有一个IP,如果你打算使用HTTPS,要小心最终的SSL问题,请查看: https : //wiki.apache.org/httpd/NameBasedSSLVHosts )

所以你将有一个虚拟主机为每个子域,假设你的域是example.com,你将有:

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

在pipe理应用程序子域的虚拟主机上,您可以根据需要使用mod_jk,mod_proxy_ajp或mod_proxy_httpconfiguration反向代理。 我会selecttomcat的mod_jk。

有了这个,你有3个问题。

这也包括你的第一个长期计划,第二个:

将维护Web应用程序绑定到整个网格,当任何域不活动或没有响应或忙碌时将会调用该网格。

你可以用不同的方式做到这一点。 例如,在Apache上使用自定义错误页面redirect到您的maintenace.example.com的500/503错误。 这可能是它自己的问题

至于你最后的问题:

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

我想我也覆盖了这一点

2我正在做的任务是什么? 网格configuration,负载平衡?

虚拟主机(最终负载均衡,请参阅后面的内容)

3如何将所有可以通过不同的URL引用的web应用程序,网站绑定在一起,但是会指向正确的web应用程序或网站。

这是从Apache虚拟主机和代理照顾。 你甚至可以重写,所以你不必在url中使用上下文path。 这也可能是它自己的问题。

4我对Apache Tomcat和Linuxpipe理有了很好的理解,而不是那么多的Apache Web服务器。 任何人都可以帮助我解决这个问题,一些规划和我所需要的,所以我可以执行它。

我想我也覆盖了这一点。

一个旁注,我会使用至less两个tomcats,但更好,每个应用程序两个tomcats。 至less有两个,所以你被覆盖的情况下tomcat死亡。 两个应用程序,所以你可以让你的应用程序彼此隔离(运行在不同的JVM的)。 这是非常方便的指向一个特定的应用程序,如果出现问题ecc。

希望这可以帮助。

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

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> 

workers.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; 

sites-enabled 000-default添加到000-default

 // 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 Web服务器,现在它工作。