首页 > 解决方案 > Pentaho j_spring_security_check 混合内容。HTTPS 到 HTTP

问题描述

我已经根据需要在 Tomcat 8.5 和 OpenJDK 1.8 上安装了 Pentaho (9.x)。在它前面是带有 mod_proxy_http 的 Apache 2.4。

我的网站使用 HTTPS 服务,并且我有以下代理规则:

    RequestHeader set X-Forwarded-Proto "https"
    ProxyPreserveHost on

    ProxyPass "/pentaho"  "http://tomcat_host_ip:8080/pentaho"
    ProxyPassReverse "/pentaho"  "http://tomcat_host_ip:8080/pentaho"

    ProxyPass "/pentaho/"  "http://tomcat_host_ip:8080/pentaho/"
    ProxyPassReverse "/pentaho/"  "http://tomcat_host_ip:8080/pentaho/"

    ProxyPass "/pentaho/Login"  "http://tomcat_host_ip:8080/pentaho/Login"
    ProxyPassReverse "/pentaho/Login"  "http://tomcat_host_ip:8080/pentaho/Login"

当我尝试在 POST 期间登录时出现错误: https ://pentaho.mywebsite.org/pentaho/j_spring_security_check

应用程序尝试使用 HTTP 协议而不是 HTTPS 进行响应。

在请求标头中,我有正确的引用者和来源:来源:https : //pentaho.mywebsite.org 引用者:https ://pentaho.mywebsite.org/pentaho/Login

但响应标头回复 HTTP 而不是 https:位置http://pentaho.mywebsite.org/pentaho/

标签: springapachetomcathttp-proxymixed-content

解决方案


我解决了这个问题,只需将 proxyPort="443" 和 scheme="https" 添加到我在 Tomcat 中的 http 连接器。

规则

RequestHeader set X-Forwarded-Proto "https"

在 Apache 上没有用。这是我正确的 Apache 配置

ProxyPreserveHost on

ProxyPass "/pentaho"  "http://tomcat_host_ip:8080/pentaho"
ProxyPassReverse "/pentaho"  "http://tomcat_host_ip:8080/pentaho"

ProxyPass "/pentaho/"  "http://tomcat_host_ip:8080/pentaho/"
ProxyPassReverse "/pentaho/"  "http://tomcat_host_ip:8080/pentaho/"

这是我的 Tomcat HTTP 连接器

   <Connector URIEncoding="UTF-8"
   port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   proxyPort="443"
   scheme="https"
   redirectPort="8443"
   relaxedPathChars="[]|"
   relaxedQueryChars="^{}[]|&amp;"
   maxHttpHeaderSize="65536"
   />

推荐阅读