在 ssl VirtualHost 中设置 Apache mod_jk

Setting up Apache mod_jk in ssl VirtualHost

我在将我的 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 Status 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>
  1. 确保您的域证书生成准确
  2. 在 /etc/apache2/ 目录中复制 *key.pem 和 *cert.pem
  3. 写下以下内容

<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>

  1. 在 /etc/httpd/httpd.conf 文件中添加 Listen 443,只需将此行添加到您在其开头找到的 Listen 80 下即可。

现在您可以同时访问 http 和 https

原来是 Apache Alias 问题。实际上我无法让 mod_jk 与 Apache 别名一起工作,所以我将 Tomcat 内容放在 Apache DirectoryRoot 中(原始配置但启用了 ssl)并使用:

SetEnvIf Request_URI "/content/*" no-jk
Alias /content /path/to/content

启用非Tomcat内容。读者还应该检查(如果他们正在使用这种技术)他们已经将 'RewriteBase /content' 添加到他们的 .htaccess 文件中。