我们有网站,例如http://www.acb.com指向硬件负载均衡器,假设负载均衡两个专用服务器。每个服务器都运行apache作为前端,并使用mod_proxy将请求转发给tomcat。
我们网站的某些页面需要使用https://www.abc.com/login或https://www.abc.com/checkout
等SSLSSL在硬件负载均衡器处终止。
当我配置mod_pagespeed时,它压缩,最小化并合并css文件并用绝对URL http://www.abc.com/css/merged.pagespeedxxx.css而不是相对url /css/merged.pagespeedxxx.css重写它们。
它适用于非ssl页面但是当我导航到诸如https://www.abc.com/login之类的ssl页面时,所有css和js文件都被浏览器阻止,例如chrome,因为它们的绝对URL不使用ssl。
如何解决此问题?
答案 0 :(得分:8)
检查此documentation和this one中的https
字符串。
您应该在问题中向我们展示您当前的ModPagespeedMapOriginDomain
&& ModPagespeedDomain
设置。
从我对这些方面的理解:
origin_specified_in_html可以指定https,但origin_to_fetch_from只能指定http,例如
ModPagespeedMapOriginDomain http://localhost https://www.example.com
此指令允许服务器接受 www.example.com 的https请求,而无需SSL证书来获取资源 - 实际上,这是mod_pagespeed可以将https请求作为服务的唯一方式目前它无法使用https来获取资源。例如,给定上面的映射,并假设Apache配置为https支持,mod_pagespeed将获取并优化使用
https://www.example.com
访问的资源,从http://localhost
获取资源,ModPagespeedLoadFromFile
可以是相同的Apache进程或不同的服务器进程
这些:
mod_pagespeed为通过https提供内容的网站提供有限支持。有两种机制可以配置mod_pagespeed来提供https请求:
- 使用ModPagespeedMapOriginDomain将https域映射到http域。
- 使用ModPagespeedLoadFromFile将本地可用目录映射到https域。
解决方案就是这样(或ModPagespeedMapOriginDomain http://localhost https://www.example.com
)
/login
但是,真正的问题是 apache不会直接接收HTTPS请求,因为硬件负载均衡器会自行处理它。因此mod-pagespeed输出过滤器甚至不知道它是为SSL域请求的。当它修改HTML内容时,可能会应用域重写,它无法处理https案例。
所以...一个解决方案(未经测试)将在apache服务器上使用另一个虚拟主机,如果需要,仍然是HTTP,专用于https处理。然后,所有与https相关的网址(/checkout
,http://secure.acb.com
,...)将由硬件负载平衡器重定向到此特定域名。我们说http://secure.acb.com
。此名称仅在负载均衡器和前端apach之间使用(当然,apache应限制仅将此VH的访问限制到负载均衡器。)
然后在这些https://www.example.com
虚拟主机中,mod_pagespeed将被配置为从外部将域重写为ModPagespeedMapOriginDomain http://secure.example.com https://www.example.com
。类似的东西:
https://www.example.com/login
最后,最终用户请求为http://secure.example.com
,负载均衡器管理HTTPS,与https://www.example.com/*
的apache通信,页面结果仅包含对http://secure.abc.com
资产的引用。现在,当使用https域请求请求这些资产时,您仍然有服务这些资产的问题。因此,硬件负载均衡器应该允许https域中的所有这些资产URL并将它们发送到{{1}}虚拟主机(或任何其他静态VH)。
答案 1 :(得分:2)
这听起来像您自己将重写的网址配置为http://www.abc.com/css/merged.pagespeedxxx.css
- 因此:尝试使用协议相对网址,例如删除http:
并仅声明//www.abc.com/css/merged.pagespeedxxx.css
- 这将使用与请求嵌入页面相同的协议。
一个标准化但相对未知的网址