Apache HTTPS虚拟主机访问自动跳转HTTP配置问题咨询
问题根因
你启用了ProxyPreserveHost On配置,后端服务收到的Host头为用户请求的test.apa.com:8081,但后端本身跑的是HTTP服务,无法感知前端Apache的HTTPS代理,因此返回3xx重定向时,生成的Location响应头会使用http://test.apa.com:8081/xxx格式。
你当前仅配置了前缀匹配的ProxyPassReverse / http://10.1.1.5:8443,该配置只会替换后端返回的Location头中前缀为http://10.1.1.5:8443的内容,不会修改后端基于Host头生成的带公网域名的重定向地址,因此错误的HTTP协议地址会直接返回给浏览器,触发自动跳转。
手动修改地址为HTTPS后可以正常访问,是因为此时请求不会触发后端的重定向逻辑,无需修正Location头即可正常代理。
解决方案
方案1:Apache层面强制修正重定向协议(无需修改后端配置)
在你的<VirtualHost *:8081>块中新增Header规则,强制将所有重定向的HTTP协议改为HTTPS,修改后的完整配置如下:
ProxyRequests Off ProxyPreserveHost On Listen 8081 <VirtualHost *:8081> RequestHeader set X-Forwarded-Proto "https" ####this is needed for our app ServerName test.apa.com ProxyPass / http://10.1.1.5:8443 ProxyPassReverse / http://10.1.1.5:8443 # 新增规则:修正重定向响应头的协议 Header always edit Location ^http://(.*) https://$1 # 可选:如果后端设置了Cookie,建议新增以下配置修正Cookie的安全属性 Header always edit Set-Cookie "(.*)" "$1; Secure" SSLEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key </VirtualHost>
修改配置后执行apachectl graceful重载配置即可生效。
方案2:后端适配X-Forwarded-Proto头(更彻底)
修改部署在10.1.1.5:8443的应用配置,开启对X-Forwarded-Proto请求头的识别,应用识别到该头值为https时,生成重定向、静态资源链接等都会自动使用HTTPS协议,无需在Apache层面做额外修正。
内容的提问来源于stack exchange,提问作者cool_stuff_coming
相关产品推荐
相关产品推荐

