如何为通过 mod_proxy 连接器 (ajp) 重定向到 tomcat 的 apache 配置 https

How to configure https for an apache redirecting to tomcat via mod_proxy connector (ajp)

我在 linux 系统(在 amazon aws 上)上有一个 apache 服务器,运行 https。我也有一个 tomcat 。我想使用 apache 作为 tomcat 的前门。我为 apache 启用了 mod_proxy 模块,并且重定向到 tomcat 工作正常,看起来像这样:

<VirtualHost *:80>
   ServerName my.domain.com

   #Log
   ErrorLog /var/log/ajp.error.log
   CustomLog /var/log/ajp.log combined

   #AJP configuration
   <Proxy *>
       Order deny,allow
       Deny from all
       Allow from all
   </Proxy>

   ProxyRequests Off

   ProxyPass / ajp://localhost:8009/
   ProxyPassReverse / ajp://localhost:8009/

 </VirtualHost>

我在 /etc/httpd/conf.d 文件夹中的文件 httpd.conf 的底部添加了这一行。

但是,如果我在 httpd.conf 文件中添加另一个 VirtualHost 以重定向到 https,则重定向到 https 有效,但将显示 apache 测试页面,而不是 tomcat 页面。如果我删除此重定向 VirtualHost,将显示 apache tomcat 页面。我还启用了 mod_rewrite 模块。我在 ssl.conf (/etc/httpd/conf.d/ssl.conf) 中配置的 https 东西,它工作正常。我在那里设置了 ssl 证书,如果客户端使用已知的 https 证书发出请求,服务器将响应该请求。否则不行。

我添加到 httpd.conf 的 https 重定向的 VirtualHost 如下所示:

    <VirtualHost *:80>
         ServerName my.domain.com
         RewriteEngine on
         ReWriteCond %{SERVER_PORT} !^443$
         RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R,L]
    </VirtualHost>

你能帮帮我吗?我在这里做错了什么?我应该在 /etc/httpd/conf.d/ssl.conf 文件中进行更改吗?我很

以下区块

<VirtualHost *:80>
  ServerName my.domain.com
  # [...]
</VirtualHost>

就像在说 "this block will handle everything for http://my.domain.com"。您不能添加具有相同 port/ServerName 的另一个:它们不会合并,一个会覆盖另一个。

如果 https 部分已经工作并且您想将所有 http 流量重定向到 https,您完全可以 comment/remove 第一个 <VirtualHost *:80> 块(使用代理)。 <VirtualHost *:443> 中的代理规则将处理一切(假设 https 部分有效)。

如果您只想将部分内容重定向到 https(不是您的问题,但这应该有助于您理解它),您应该将 RewriteEngine / ReWriteCond / RewriteRule 指令 现有的虚拟主机中。

好的,现在我得到了那个问题的解决方案。我在 /etc/httpd/conf.d/ssl.conf 的底部写了这行,在 VirtualHost 结束之前:

#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined

#AJP configuration
<Proxy *>
       Order deny,allow
       Deny from all
       Allow from all
</Proxy>

ProxyRequests Off

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/