![与 Tomcat 的 SSL 连接(Apache - mod_jk 后面)](https://linux22.com/image/578369/%E4%B8%8E%20Tomcat%20%E7%9A%84%20SSL%20%E8%BF%9E%E6%8E%A5%EF%BC%88Apache%20-%20mod_jk%20%E5%90%8E%E9%9D%A2%EF%BC%89.png)
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
来自DocumentRoot
httpd配置文件仅负责全局 Apache 设置。如果您在服务器上设置了VirtualHost
配置,它根本不会干扰您的 VH。
我建议现在增加您的LogLevel
并随后检查日志文件。此外,如果它尚未在生产服务器上,您DocumentRoot
也可以删除 httpd.conf 中的行。
我没用过mod_jk很长一段时间以来,我发现配置本身并不十分有趣。我切换到mod_proxy对于这种反向代理,因为它更直观。对于 Tomcat,我使用mod_proxy_ajp并将元素放在<IfModule mod_proxy_ajp.c>
容器中。但这可能是个人喜好问题。如果您不知道原因,您可以尝试一下,以节省时间。