ssl Tomcat资产无法通过Apache反向代理加载

q8l4jmvw  于 2023-01-13  发布在  Apache
关注(0)|答案(1)|浏览(130)

bounty将在4天后过期。回答此问题可获得+200声望奖励。reynoldsnlp希望引起更多人关注此问题。

通过SSL访问我的tomcat Web应用程序(https)已经工作了很多年,但是最近一些奇怪的事情开始发生,可能与使用Docker容器tomcat:8-jdk8有关(即v 8.5.75)而不是tomcat:8.5.41-jdk8(已不再可用)。当我尝试通过Apache的反向代理访问我的Tomcat应用程序时,(https://example.com/myapp),则加载主wire框架HTML页面,但是所有jscss资产都获得404,因为它们缺少基本url中的app目录,因此实际上在页面上加载任何可见内容。HTML请求X1 E3 F1 X而不是X1 E4 F1 X(注意X1 M7 N1 X)。
不过,我可以访问应用程序,在没有Apache/SSL(http://example.com:8080/myapp)的情况下访问时,一切都在100%工作。
最奇怪的是,如果我不使用SSL访问应用程序(http://example.com:8080/myapp),然后在同一选项卡中,将url更改为SSL路径(https://example.com/myapp),那么一切都加载良好,功能正常。在这一点上,我甚至可以Empty Cache and Hard Reload,一切仍然通过SSL加载良好。我检查了所有网络请求的头部,而且所有东西都是通过SSL加载的。Chrome、Firefox和Safari都有同样的行为。但是,在Chrome和Safari中,如果我访问该标签页中的任何其他网站,然后尝试通过SSL加载我的应用,它会失败;在火狐浏览器中,相同的标签将继续加载我的应用程序,无论调解网站访问。
Apache配置如下所示:

<VirtualHost *:80>
    Servername example.com

    ##  The following email address is setup in /etc/postfix/localusers
    ServerAdmin webmaster@localhost

    UseCanonicalName On

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [R=301,QSA,L]
    ##  R=redirect, QSA=keep any query string, L=last rule to evaluate, stop.
</VirtualHost>

<VirtualHost *:443>
    Servername example.com
    UseCanonicalName On

    ProxyPass        /myapp http://127.0.0.1:8080/myapp/
    ProxyPassReverse /myapp http://127.0.0.1:8080/myapp/

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
    SSLCACertificateFile /etc/ssl/certs/ca.crt
    SSLVerifyDepth 2

    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
    LogLevel warn

    ErrorLog ${APACHE_LOG_DIR}/example_ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/example_ssl-access.log combined
</VirtualHost>

tomcat配置是the default config,它来自tomcat docker容器。我的项目中没有META-INF/目录。
Question 1:为什么只有在浏览器第一次不使用Apache/SSL直接访问tomcat * 之后 *,tomcat才通过Apache/SSL提供正确的URL?
Question 2:如何让此应用始终通过SSL加载(通过始终在基本URL中包含应用名称)?

2nbm6dog

2nbm6dog1#

重定向中的源路径和目标路径不一致。请删除目标路径中的最后一个/。

ProxyPass        /myapp http://127.0.0.1:8080/myapp
    ProxyPassReverse /myapp http://127.0.0.1:8080/myapp

使用further/的Map导致路径中出现了双//,我猜这会导致在生成页面时处理路径时出现问题。

相关问题