在 ssl VirtualHost 中设置 Apache mod_jk
Posted
技术标签:
【中文标题】在 ssl VirtualHost 中设置 Apache mod_jk【英文标题】:Setting up Apache mod_jk in ssl VirtualHost 【发布时间】:2016-05-04 06:10:09 【问题描述】:我在将我的 Apache mod_jk 配置从它自己的 VirtualHost 配置移动到我的主 ssl VirtualHost 配置时遇到问题。
Tomcat 使用 mod_jk 和 VirtualHost 配置使用自己的域工作正常 - 工作配置....
LoadModule jk_module /etc/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
<VirtualHost *:80>
ServerName <my cname>
DocumentRoot /opt/appserver/webapps/ROOT
DirectoryIndex index_page.jsp
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /opt/appserver/webapps/ROOT>
AllowOverride None
Options FollowSymLinks
Order allow,deny
allow from all
</Directory>
JkMount /* ajp13
</VirtualHost>
但是,因为我想将我的 Tomcat 表单嵌入到我的 ssl 主服务器页面中(不能混合使用 http 和 https),我需要将我的 mod_jk 配置作为子文件夹移动到我的主 ssl VirtualHost 中。我尝试了以下更改,但在尝试访问 https:// 时出现 Tomcat 错误“HTTP 状态 404 - /servlet/”
新的服务器配置:
<VirtualHost _default_:443>
...lots of my main ssl server config stuff...
Alias /servlet /opt/appserver/webapps/ROOT
JkMount /servlet/* ajp13
<Directory /opt/appserver/webapps/ROOT>
AllowOverride None
Options FollowSymLinks
Order allow,deny
allow from all
DirectoryIndex index_page.jsp
</Directory>
</VirtualHost>
【问题讨论】:
请发布 mod-jk、httpd 和 tomcat 日志以了解确切问题 页面请求没有 tomcat 日志。 ssl_access_log 中有一个 404 日志,但是呈现给浏览器的 404 消息来自于 tomcat(它有一个 'Apache Tomcat/7.0.59' 页脚)。 【参考方案1】:-
确保您的域证书生成准确
在 /etc/apache2/ 目录中复制 *key.pem 和 *cert.pem
写如下
<VirtualHost _default_:443>
DocumentRoot "/opt/appserver/webapps/Your-Project-Directory"
ServerName YourDomain.com
ErrorLog "/var/log/apache2/https_YourDomain.com-error_log"
CustomLog "/var/log/apache2/https_YourDomain.com-access_log"
common SSLEngine On
SSLCertificateFile /etc/apache2/*cert.pem
SSLCertificateKeyFile /etc/apache2/*key.pem
JkMountCopy On
JkMount /* ajp13
</VirtualHost>
-
在 /etc/httpd/httpd.conf 文件中添加 Listen 443,只需在开头找到的 Listen 80 下添加这一行即可。
现在你可以同时访问 http 和 https
【讨论】:
您的所有建议都已在我的配置中生效(我的...很多其他的东西...评论)。问题似乎是当 DocumentRoot 设置为 /opt/appserver/webapps/ROOT 时 mod_jk 正在工作,但是当我使用别名时它停止工作(可能,我的想法已经用完了)。 您是否在 server.xml 文件中设置了虚拟主机?【参考方案2】:结果证明这是一个 Apache Alias 问题。实际上我无法让 mod_jk 与 Apache Alias 一起工作,所以我将 Tomcat 内容放在 Apache DirectoryRoot 中(原始配置,但打开了 ssl)并使用:
SetEnvIf Request_URI "/content/*" no-jk
Alias /content /path/to/content
启用非 Tomcat 内容。读者还应该检查(如果他们正在使用这种技术)他们是否已将“RewriteBase /content”添加到他们的 .htaccess 文件中。
【讨论】:
以上是关于在 ssl VirtualHost 中设置 Apache mod_jk的主要内容,如果未能解决你的问题,请参考以下文章
OSX Apache Virtualhost 仅返回默认页面
在 python http.client.HTTPSConnection 中设置更新的 ssl 版本