与 Tomcat 的 SSL 连接(Apache - mod_jk 后面)

与 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 的工作配置是:

<VirtualHost *:80>
ServerName *******

JkMount /cas ajp13_worker
JkMount /cas/* ajp13_worker

</VirtualHost>

我的问题是什么

当我尝试对端口 443 使用具有类似 vhost 配置的 https 时 - apache 日志中有一个条目:

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

配置文件

端口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 中我指定了证书路径...除 Tomcat 页面外,https 对所有页面均正常运行。

DocumentRoot 在 httpd.conf 中指定。

问题

是什么在控制 Apache 是在 DocumentRoot 目录中搜索还是将请求转发到 Tomcat?我做错了什么?

谢谢 :)

答案1

检查输出apache2ctl -S- 在端口上首先加载的第二个 SSL vhost 将获取请求而不是所需的 vhost。

答案2

什么控制着 Apache 是在 DocumentRoot 目录中搜索还是将请求转发到 Tomcat?

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

我很好奇你为什么认为你需要两个 - 只需使用 /cas/* (如果 /cas 不存在,apache 会根据 DirectorySlash 设置自动将 /cas 的请求重定向到 /cas/,默认为 On)

答案3

来自DocumentRoothttpd配置文件仅负责全局 Apache 设置。如果您在服务器上设置了VirtualHost配置,它根本不会干扰您的 VH。

我建议现在增加您的LogLevel并随后检查日志文件。此外,如果它尚未在生产服务器上,您DocumentRoot也可以删除 httpd.conf 中的行。

我没用过mod_jk很长一段时间以来,我发现配置本身并不十分有趣。我切换到mod_proxy对于这种反向代理,因为它更直观。对于 Tomcat,我使用mod_proxy_ajp并将元素放在<IfModule mod_proxy_ajp.c>容器中。但这可能是个人喜好问题。如果您不知道原因,您可以尝试一下,以节省时间。

相关内容