我们有一个Debian X64服务器,当前有一个tomcat实例,我们在WAR文件中有3个webapps 。 另外,我们有一个Apache web服务器,它有一个CMS系统运行。 最后一个项目是Maintenance Web应用程序,当我们在服务器上工作并且服务不可用时显示。
我们面临的问题是:
我想长期做的事情是:
www.xyz.com ,那么它应该调用我们拥有的XYZ webapp。 相同的webapp名称和域名是纯粹的偶然事件。 Maintenance 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服务器,现在它工作。