使用Apache在Apache2虚拟主机后面保护Tomcat

时间:2013-07-04 11:56:34

标签: apache tomcat ssl apache2 tomcat7

我有一个在apache虚拟主机后面运行的tomcat服务器(所以我可以在同一台服务器上使用多个域)。所有apache都会获取主机名并将请求转发给正确的tomcat服务器,后者将处理所有内容。

我希望在其中一个域上设置SSL,我理解如何执行此操作但我对是否应该允许tomcat处理所有SSL或apache感到困惑。

有什么区别?允许tomcat处理ssl的任何缺点?如果我让apache处理ssl,当我访问tomcat应用程序时,我还会得到绿色条,挂锁等吗?我对整个情况感到有些困惑。

我使用代理来处理apache2转发到正确的tomcat应用程序。如果我像这样设置代理:

<VirtualHost 1.2.3.4:443>
    ServerName host.domain.org

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    SSLEngine on
    SSLProxyEngine On
    SSLCertificateFile /etc/apache2/ssl/certificate.crt
    SSLCertificateKeyFile /etc/apache2/ssl/certificate.key

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8443/
    ProxyPassReverse / https://localhost:8443/
</VirtualHost>

我需要使用https和端口8443吗?这样做我不也要在tomcat上设置SSL吗?或者我可以在tomcat的server.xml

的连接器中使用以下内容
secure = false
scheme = https
proxyName = www.mydomain.com
proxyPort = 443

并不担心将tomcat连接到ssl密钥?这是通过apache2使用SSL保护tomcat应用程序的正确方法吗?

1 个答案:

答案 0 :(得分:0)

您在配置中说明的方式,每个请求都有两个不同的https连接。从任何客户端到您的apache的第一名。 Apache会解密请求,并且 - 为了转发请求 - 与tomcat协商SSL连接。您必须以这种方式在两台机器上设置https。

您可以使用http转发到tomcat(通常是端口8080)。但是,可能是tomcat没有看到您以这种方式使用https(您必须尝试一下)。如果您使用ajp,例如mod_jk或mod_proxy_ajp,而不是apache和tomcat之间的http,tomcat肯定也会看到https连接。

你应该做什么取决于Apache和tomcat之间的距离 - 以及你们之间对网络的信任程度。我说没有加密运行此连接通常没问题,但您的里程可能会有所不同。

在apache上处理https会得到什么?好吧,我假设Apache可能会在会话协商和加密方面做得更好 - 至少它会将加密内容卸载到不同的服务器上,允许tomcat做它最擅长的事情(服务应用程序)并让Apache处理所有奇怪的加密东西。

我喜欢这种配置 - 通常你也可以使用mod_rewrite,负载平衡等快速解决一些问题,这样一个额外的apache可以让你比#34更加灵活。只需&#34;一只雄猫。