Apache 配置 ssl 后,tomcat “代理与反向代理”不能工作的解决办法

在 apache 的配置文件中,如下配置可以正常访问:

<VirtualHost *:80>
        ServerName app.mydomain.com
        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass / http://127.0.0.1:8080/app
        ProxyPassReverse / http://127.0.0.1:8080/app

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

为了叙述方便,我们给这个配置命名为:“配置一”

这时,通过 http://app.mydomain.com 可以正常访问项目,且地址栏中的 url 地址也没有发生任何跳转,仍然是 http://app.mydomain.com ,这是符合预期的。

但是通过使用 certbot 申请并配置了 ssl 证书以后,certbot 会自动配置一个 443 的 VirtualHost ,如下:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName app.mydaomain.com

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass / http://127.0.0.1:8080/app
        ProxyPassReverse / http://127.0.0.1:8080/app

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /etc/letsencrypt/live/app.mydaomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/app.mydaomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

同理,我们给这个配置命名为:“配置二”。

很显然,配置二是根据已有的配置一,由 certbot 自动产生的。但是,却无法正常工作,如果我们访问 https://app.mydomain.com , 浏览器的地址栏却跳转到了 https://app.mydomain.com/app  ,这显然不符合我们的预期。

经过摸索发现,如果启用了 ssl 证书以后,代理与反向代理地址后面需要强制加上 / ,否则无法工作。也就是说,上述配置一配置二中的内容改为:

ProxyPass / http://127.0.0.1:8080/app/
ProxyPassReverse / http://127.0.0.1:8080/app/

就可以正常工作了。

如果使用 ssl 证书,可以不加 / 。这真是一个奇葩的bug,至少是一个瑕疵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值