到Tomcat的SSL连接(在Apache之后 – mod_jk)

SSL连接对Apache服务器上的每个页面都起作用,除了这些服务器用于Tomcat。 Tomcat在http连接上工作良好。

设置:

  • 阿帕奇/ 2.2.21
  • Tomcat的7.0.23
  • mod_jk来连接它们
  • 自签名证书

什么是工作

如果我尝试通过http连接到tomcat,一切都可以。 JkMount指令中指定的每个页面都转发给Tomcat,而其他所有页面都是Apache的责任。 我有两个虚拟主机 – 一个用于端口80和一个用于443. 80的工作configuration是:

<VirtualHost *:80> ServerName ******* JkMount /cas ajp13_worker JkMount /cas/* ajp13_worker </VirtualHost> 

我的问题是什么

当我尝试使用与端口443类似的虚拟主机configuration的HTTPS – 在Apache日志中有一个条目:

 File does not exist: ****/apache2/htdocs/cas 

configuration文件

端口443上的vhost设置:

 <VirtualHost ****:443> ServerName ******* JkMount /cas ajp13_worker JkMount /cas/* ajp13_worker </VirtualHost> 

在httpd.conf中,mod_jk的部分是:

 JkWorkersFile ****/tomcat-7.0.23/conf/workers.properties JkLogFile ****/apache2/logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " (I've read that I need the following lines ... ) JkExtractSSL On JkHTTPSIndicator HTTPS JkSESSIONIndicator SSL_SESSION_ID JkCIPHERIndicator SSL_CIPHER JkCERTSIndicator SSL_CLIENT_CERT 

在httpd-ssl.conf中,我已经指定了证书path… https对除了Tomcat以外的所有页面都正常工作。

DocumentRoot在httpd.conf中指定。

问题

什么是控制Apache是​​否在DocumentRoot目录中search或将请求转发给Tomcat? 我究竟做错了什么?

谢谢 :)

检查apache2ctl -S的输出 – 第一个在端口上加载的第二个SSL虚拟主机将获取请求,而不是所需的虚拟主机。

什么是控制Apache是​​否在DocumentRoot目录中search或将请求转发到Tomcat?

两个因素: <Directory>和相关指令的顺序和定义,以及JKMount位置。

我很好奇为什么你认为你需要两个 – 只是使用/ cas / *(如果/ cas不存在,apache将redirect/ cas的请求到/ cas /自动,基于DirectorySlash设置,默认为On)

httpd.conf中DocumentRoot只负责全局的Apache设置。 如果你在你的服务器上设置VirtualHostconfiguration,它不应该干扰你的VH。

我build议现在增加您的日志LogLevel然后检查日志文件。 另外,如果它还没有在生产性服务器上,那么也可以把DocumentRoot行放在httpd.conf中。

我没有使用mod_jk很长一段时间,因为我发现configuration本身不是很有趣。 我切换到mod_proxy这种反向代理,因为它更直观。 在Tomcat的情况下,我使用mod_proxy_ajp并用<IfModule mod_proxy_ajp.c>容器包含元素。 但这可能是个人风味的事情。 如果你不知道为什么,你可以节省时间试试。