我刚开始使用CloudFlare“灵活SSL”,这允许用户在连接到我的服务器时拥有SSL(当然是通过CloudFlare)。
以下是请求的结果:
访问者< - SSL - > CloudFlare < - 非SSL - > 我的服务器(Nginx w / pagespeed)
问题来自Nginx重写我的资源(css,js,jpegs等),nginx总是从CloudFlare收到一个http请求,所以显然Nginx将资源作为http(在html中)返回,当用户尝试加载时他们在浏览器上看到一个丑陋的图标,警告不安全的内容,或者不加载完全破坏页面的所有不安全的内容。
这些是我目前使用的过滤器:pagespeed EnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,combine_javascript,insert_image_dimensions,collapse_whitespace,sprite_images,insert_dns_prefetch;
那么如何让nginx pagespeed将资源返回为https?以及当请求是http时如何作为非https?
感谢。
答案 0 :(得分:4)
只要CloudFlare发送标准X-Forwarded-Proto
标头,您只需启用RespectXForwardedProto
即可解决此问题:
pagespeed RespectXForwardedProto on;
如果这不起作用,那可能意味着CloudFlare没有发送正确的X-Forwarded-Proto
标头。如果是这样,您可以尝试启用PreserveUrlRelativity
:
pagespeed PreserveUrlRelativity on;
将重写URL,但将它们保留为相对URL(以便它们同时使用HTTP和HTTPS)。