Apache + Tomcat:哪一个应该处理SSL? 基于IP的代理转发?

我们目前有一个在端口443上运行SSL的Tomcat应用程序。现在我们有一个Apache服务器,它接受端口80上的http请求并redirect到Tomcat实例:

<VirtualHost *:80> ServerName domain.com ServerAlias domain.com <LocationMatch "/"> Redirect permanent / https://domain.com/ </LocationMatch> </VirtualHost> 

Tomcat正在处理SSL,因为没有代理,只是一个简单的redirect到SSL端口:

  <Connector port="443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/app/ssl/domain_com.jks" keystorePass="ourpassword" clientAuth="false" sslProtocol="TLS"/> 

我们希望开始使用Apache Web服务器作为代理,另外,每个IP都会redirect到某些只能由预定IP范围内的主机使用的应用程序。 我们还想将不符合预定列表的IPredirect到apache服务器上的静态html页面。

我的第一个问题是:我应该继续在Tomcat上处理SSL,还是应该在转发到“不受保护”的tomcat端口时使用带有SSL的apache?

有什么办法根据传入的IPredirect到不同的应用程序(和潜在的主机)?

谢谢,德尔

至于SSL处理,这是一个典型的SSL卸载用例。 既然你很可能会使用一个SSL证书(证书为你的域名),你将有一个Apache和N Tomcats ..所以Apache是​​更好的SSL处理的地方。 Apache和Tomcat之间的通信应该通过AJP而不是http或https。

我已经写了一个一步一步的说明SSL卸载,可能对你有帮助。 并链接到它: http : //milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html

我们总是使用Apache(或Nginx)进行代理和“SSL卸载”,正如有些人所说的那样。 在各种要求的各种生产体系中已经做了多年。 Apache为您提供了许多灵活性和许多可以利用的function,因此您可以将应用程序服务器configuration保持为简单,简洁,易于理解的forms。 我也build议使用mod_jk(即AJP)来连接Apache和Tomcat。 Tomcat默认在端口8009上侦听AJP请求。

至于你的redirect问题:这可以很容易地使用mod_rewrite,mod_jk和在你的Apacheconfiguration中的几个Location / LocationMatch指令。 取决于你想要做什么。 需要更多的细节,或更好的,一个单独的问题。

这个有可能。 我更喜欢将Apache作为所有后端Web服务器的前端,包括Tomcat的多个版本(允许每个客户更容易升级),IIS和一些设备。

SSL卸载在http://www.invantive.com/about-invantive/news/entryid/897/ssl-offloading-for-apache-tomcat中描述&#x3002;

关于问题2(select性redirect):

我们通常使用两种方法:

  • 应用程序的所有类似实例都可以使用虚拟主机在一个URL后面访问。 例如,app1.invantive.com或that-other-app.invantive.com。
  • 每个用户组在该虚拟主机中获取不同的URL,以及某种forms的拆分DTAP。 例如,app1.invantive.com/acme-corporation/production,app1.invantive.com/acme-northpole-corporation/test。

如果您仅将Apache用于路由stream量,则很less需要replace它。 因此,它变成一个强大的组件,可以轻松地将应用程序和网站传输到新的位置,而您只需redirectApache路由规则即可。 您不再有DNS更改和TTL问题。

我真的不熟悉tomcat应用程序或架构(我只在我的组织中运行一些应用程序或架构),因此可能还有其他方法可以用于大规模实施。 然而,SSL可以由Tomcat,Apache处理或者卸载到负载平衡器,而您提到的其他东西可以使用mod_rewrite轻松处理。

有一些Apache模块可以做到这一点(在网上有很多howto和guide)。 看看mod_proxy,mod_proxy_ajp或者mod_jk。 你会想做一些研究,找出最适合你的。

无论如何,这将是一个很好的研究起点。

希望这可以帮助!