Apache使用mod_proxy_ajp在Glassfish v3前面使用SSL

时间:2011-02-07 16:23:27

标签: apache ssl glassfish mod-proxy



我希望这里有一些裂缝可以很容易地解决我在几个论坛中搜索后遇到的问题:我需要将一个Glassfish v3应用服务器放在Apache 2.2.x网络服务器后面,就像我的webhoster提供的一些部分,例如webmail ,正在网络服务器上运行(所以我无法关闭它)。因此,我决定使用更新的解决方案“mod_proxy_ajp”(开箱即用的Apache)而不是更复杂的“mod_jk”来将请求通过Apache传递给Glassfish。我到现在所做的是这样的:

Apache包含“/etc/httpd/conf.d/proxy_ajp.conf”,其中包含:

  • LoadModule proxy_ajp_module modules / mod_proxy_ajp.so
  • ProxyPass / mail!
  • ProxyPass / ajp:// localhost:8080 /
  • ProxyPassReverse / ajp:// localhost:8080 /

Glassfish的:

  • http-listener-1正在侦听8080并启用“JK侦听器”
  • http-listener-2正在侦听8181并使用我的SSL证书启用安全性

但我想做的是:

  1. 将所有“https://webmail.mydomain.com”请求路由到Apache(webhoster email web-frontend)
  2. 将所有其他请求HTTP和HTTPS路由到Glassfish。对于8080或8009上的我的Glassfish http-listener-1的HTTP,对于使用我在8181上向我的Glassfish http-listener-2注册的SSL证书的HTTPS(在两个方向上,传递和反向这些端口对于用户不应该是可见的)
  3. 强制所有对Glassfish的请求被重定向/切换到HTTPS,或者基于特定资源的web.xml安全配置(somefile.html)强制从HTTP切换到HTTPS(或任何其他解决方案来执行此操作)< / LI>

如果有人可以提供解决这3个任务的简短描述,我会非常高兴,因为我不是深入Java Web管理。
在此先感谢并欢呼
〜limubai

1 个答案:

答案 0 :(得分:4)

这是很多问题!听起来您正试图通过Apache代理GlassFish,因此用户可以在标准端口(80和443)上访问您的应用程序,并且您有多个应用程序,多个域,并且您希望使用SSL。

那么,你有很多工作要做!您可能需要在Apache上查看虚拟主机;特别是,一个用于webmail.mydomain.com的虚拟主机,另一个用于mydomain.com。

如果您的网络服务器上没有两个IP地址(两个网卡),那么您将不得不使用基于名称的虚拟主机。请注意,基于名称的虚拟主机和SSL不能轻松协同工作;您可能必须使用通用名称为mydomain.com和别名为webmail.mydomain.com(altSubjectName扩展名)的SSL证书。

有关配置Apache的信息,请访问:

http://httpd.apache.org/docs/2.2/vhosts/

有关使用基于名称的虚拟主机与SSL的信息,请访问:

http://wiki.apache.org/httpd/NameBasedSSLVHosts

有关配置GlassFish的信息,请访问:

http://download.oracle.com/docs/cd/E18930_01/html/821-2416/gfaad.html