检查本文档和本https
文档中的字符串。
您应该在问题中向我们展示您当前的ModPagespeedMapOriginDomain
&&ModPagespeedDomain
设置。
根据我从这些方面的理解:
origin_specified_in_html 可以指定 https 但 origin_to_fetch_from 只能指定 http,例如
ModPagespeedMapOriginDomain http://localhost https://www.example.com
该指令允许服务器在不需要 SSL 证书来获取资源的情况下接受www.example.com的 https 请求 -事实上,这是 mod_pagespeed 可以服务 https 请求的唯一方式,因为目前它不能使用 https 来获取资源。例如,给定上述映射,并假设 Apache 配置为支持 https,mod_pagespeed 将获取和优化使用 访问https://www.example.com
的资源,从 获取资源http://localhost
,这可以是相同的 Apache 进程或不同的服务器进程。
还有这些:
mod_pagespeed 为通过 https 提供内容的网站提供有限的支持。有两种机制可以配置 mod_pagespeed 来服务 https 请求:
- 使用 ModPagespeedMapOriginDomain 将 https 域映射到 http 域。
- 使用 ModPagespeedLoadFromFile 将本地可用目录映射到 https 域。
解决方案将是这样的(或带有 的ModPagespeedLoadFromFile
)
ModPagespeedMapOriginDomain http://localhost https://www.example.com
但是,对您来说真正的问题是apache 不会直接接收 HTTPS 请求,因为硬件负载均衡器会自行处理它。所以 mod-pagespeed 输出过滤器甚至不知道它是为 SSL 域请求的。而当它修改 HTML 内容时,可能应用域重写,它无法处理 https 的情况。
所以......一个解决方案(未经测试)将在 apache 服务器上使用另一个虚拟主机,如果你愿意,仍然是 HTTP,专用于 https 处理。所有与 https 相关的 url ( /login
, /checkout
,...) 都会被硬件负载均衡器重定向到这个特定的域名。比方说http://secure.acb.com
。此名称仅在负载均衡器和前端 apache 之间使用(当然 apache 应该将对该 VH 的访问限制为仅对负载均衡器)。
然后在这些虚拟主机中http://secure.acb.com
mod_pagespeed 将被配置为从外部将域重写为https://www.example.com
. 就像是:
ModPagespeedMapOriginDomain http://secure.example.com https://www.example.com
最后,最终用户请求是https://www.example.com/login
,负载均衡器管理 HTTPS,与 apache 对话http://secure.example.com
,页面结果仅包含对https://www.example.com/*
资产的引用。现在,当使用 https 域请求请求这些资产时,您仍然会遇到提供这些资产的问题。因此,硬件负载均衡器应该允许 https 域中的所有这些资产 url 并将它们发送到http://secure.abc.com
虚拟主机(或任何其他静态 VH)。