如何为SSL页面配置mod_pagespeed

时间:2013-01-17 05:42:39

标签: apache tomcat mod-pagespeed

我们有网站,例如http://www.acb.com指向硬件负载均衡器,假设负载均衡两个专用服务器。每个服务器都运行apache作为前端,并使用mod_proxy将请求转发给tomcat。

我们网站的某些页面需要使用https://www.abc.com/loginhttps://www.abc.com/checkout

等SSL

SSL在硬件负载均衡器处终止。

当我配置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。

如何解决此问题?

2 个答案:

答案 0 :(得分:8)

检查此documentationthis 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相关的网址(/checkouthttp://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 - 这将使用与请求嵌入页面相同的协议。

一个标准化但相对未知的网址