我有一台可访问互联网的 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。