如何通过Apache与多个Tomcat Webapp实例一起使用SSL?

时间:2011-01-11 13:09:15

标签: tomcat ssl apache

我们目前拥有的webapp是一种标准的东西,http主页和信息页面,但重定向到httpS(即SSL)以进行登录和用户操作等。

目前我们将所有的webapp实例(生产,测试,演示等)部署到一个Jetty实例中,我们可以通过www.ourapp.com/test和www.ourapp.com/demo访问它们,显然是www。 ourapp.com进行制作。

这个问题是每当我们对一个实例进行更改时,我们需要重新启动所有实例,这并不理想。此外,我并不特别喜欢使用Jetty进行制作,即使我们的应用程序目前的音量不是很高。

我正在尝试将Apache httpd转发到tomcat的多个实例,每个实例托管我们的应用程序的不同实例。这将让我单独关闭并重新启动每个tomcat / app实例。

我已经在各种不同的端口上安装了多个tomcats安装,因此它们不会相互冲突(例如8081,8082,8083),将它们的AJP连接器端口设置为彼此不同(例如8010,8011,8012)和httpd此时侦听端口8090,以免与端口80上运行的当前生产实例冲突。

在httpd.conf中,我有一些设置,如;

JkMount / test * tomcatTest

在workers.properties中我有如下设置:

worker.tomcatTest.port = 8010
worker.tomcatTest.host =本地主机
worker.tomcatTest.type = AJP13
worker.tomcatTest.lbfactor = 100

httpd正在转发到初始目标网页。当我需要访问SSL页面进行登录等时会出现问题。每个tomcat安装都会取消注释SSL连接器,端口也会有所不同,8444,8445,8446等。

希望你能看到我想在这里实现的设置。我只是需要一些帮助,让非SSL页面链接到SSL页面,就像它们通常在一个Jetty / Tomcat实例中并且Apache没有进行所有转发一样。我需要做什么指针?

3 个答案:

答案 0 :(得分:1)

如果要使用Tomcat的本机SSL连接器,则必须将应用程序重定向到主机上的Tomcat端口。它无法由Apache处理。这是因为Apache还必须安装每个Tomcat服务器的SSL证书 - 并且您一次只能安装一个证书。

最好使用Apache来终止SSL连接。

使用适当的证书配置Apache(参见下面的[1]),并启用SSL。然后在您的VirtualHost SSL定义中,再次添加所有JkMount行。

例如:

<VirtualHost _default_:443>
   JkMount /test* tomcatTest
</VirtualHost>

这意味着SSL将处理SSL连接,然后使用AJP将其连接到Tomcat。这极大地简化了配置,因为您在Tomcat配置中所需的只是AJP连接器。

[1]您需要一个包含您要使用的所有可能vhost的证书。创建其中一个有点超出了问题的范围,但只需说明您需要在证书中为您可能使用的每个主机名subjectAltName。如果使用新主机名创建新应用程序,则需要重新生成证书。

  

此外,我并不特别喜欢使用Jetty进行制作,即使我们的应用程序目前的音量不是很高。

生产中的Jetty绝对适用于99%的用例。我经常发现Tomcat更像是一只反复无常的野兽,并且经常最终将它交换为Jetty。

答案 1 :(得分:1)

你需要的是ssl-offloading: 1.在码头配置,用ssl保护什么或路径; 2.前面的码头上有阿帕奇,让阿帕奇处理掉码头的所有东西。 3.配置jetty以接受ssl处理apache 4.在apache上设置多个vhost(对于单个ip),配置apache以对每个vhost使用不同的SSL certifiacate。 ...

此主题的分步指南可在此处找到:

http://milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html

答案 2 :(得分:0)

假设您的worker.properties文件包含此内容。

> worker.list=balancer,stat   worker.tomcat1.type=ajp13
> worker.tomcat1.port=8109 worker.tomcat1.host=localhost  
> worker.tomcat2.type=ajp13 worker.tomcat2.port=8209
> worker.tomcat2.host=localhost   worker.tomcat3.type=ajp13
> worker.tomcat3.port=8309 worker.tomcat3.host=localhost
>     worker.balancer.type=lb worker.balancer.balance_workers=tomcat1,tomcat2,tomcat3  
> worker.stat.type=status

然后你必须添加 JkMount / * balancer

中的httpd-ssl.conf中的

  

<Virtualhost>   标签

<VirtualHost _default_:443>
#No change in other existing code
JkMount  /*  balancer   

> </VirtualHost>