Apache 反向代理 https 到 http

Apache 反向代理 https 到 http

我有一台可访问互联网的 Apache 服务器,该服务器已启用 SSL 并正常运行。在本地网络上,还有另一台服务器通过 http 提供 tomcat 应用程序。

apache 服务器反向代理 tomcat 应用程序。当通过 http 使用 apache 服务器时,tomcat 应用程序被正确代理,但当通过 https 使用它时,tomcat 服务器返回 404 资源未找到。那么 https 请求没有转换为 http 吗?我更愿意在不触碰 tomcat 配置的情况下做到这一点,因为那不是我的领域。

这是我的配置:

<VirtualHost *:443>
        ServerName ext-service.example.com
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl.crt/mycert.crt
        SSLCertificateKeyFile /etc/apache2/ssl.key/mykey.key
        SSLCertificateChainFile /etc/apache2/ssl.crt/mybundle.crt
        ProxyRequests Off
        ProxyPreserveHost Off
        <Proxy *>
          AddDefaultCharset off
          Order deny,allow
          Allow from all
        </Proxy>
        DocumentRoot /srv/www/empty/
        ProxyPass / http://int-service.example.com/
        ProxyPassReverse / http://int-service.example.com/
</VirtualHost>

答案1

如果 tomcat 设置为使用 AJP,我建议您使用它。

ProxyPass / ajp://int-service.example.com:<ajp_port>/  
ProxyPassReverse / ajp://int-service.example.com:<ajp_port>/

答案2

您必须调整 tomcat 配置,没有其他办法。您的 apache 配置目前看起来还不错,但与我的设置相比,只有两点不对:

  • DocumentRoot在那里是没用的,你可以删除它,因为你代理了一切。
  • ProxyPreserveHost应该On

另一方面,必须告知 Tomcat 它前面有一个代理,并且它使用的是 https 而不是 http。

应该有一个指定连接器的配置文件。

<Connector port="80"

   <!-- add these lines -->
   scheme="https"
   proxyName="ext-service.example.com"
   proxyPort="443"

   <!-- other options -->
/>

添加这些行之后,Tomcat 就知道如何生成 URL。

相关内容