如何将 CloudFlare“灵活 SSL”与 Nginx PageSpeed 过滤器结合使用

Dan*_*nny 1 ssl https nginx pagespeed cloudflare

我刚刚开始使用 CloudFlare“灵活 SSL”,这允许用户在连接到我的服务器时拥有 SSL(当然是通过 CloudFlare)。

\n\n

请求的流程如下:

\n\n

访客<-- SSL --> CloudFlare <-- 非 SSL -->我的服务器(Nginx w/pagespeed)

\n\n

当 Nginx 重写我的资源(css、js、jpegs 等)时,问题就出现了,nginx 总是收到来自 CloudFlare 的 http 请求,所以显然 Nginx 将资源返回为 http(在 html 中),当用户尝试加载它们时,他们会得到浏览器上有一个丑陋的图标,警告不安全的内容,或者根本不加载不安全的内容,从而完全破坏页面。

\n\n

这些是我当前正在使用的过滤器:pagespeed EnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,combine_javascript,insert_image_dimensions,collapse_whitespace,sprite_images,ins\xe2\x80\x8c\xe2\x80\x8bert_dns_prefetch;

\n\n

那么如何让 nginx pagespeed 以 https 形式返回资源呢?当请求是http时,如何作为非https?

\n\n

谢谢。

\n

sli*_*cki 5

只要 CloudFlare 发送标准X-Forwarded-Proto标头,您只需启用即可解决此问题RespectXForwardedProto

    pagespeed RespectXForwardedProto on;
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,这可能意味着 CloudFlare 没有发送正确的X-Forwarded-Proto标头。如果是这样,您可以尝试启用PreserveUrlRelativity

    pagespeed PreserveUrlRelativity on;
Run Code Online (Sandbox Code Playgroud)

这将重写 URL,但将它们保留为相对 URL(以便它们同时适用于 HTTP 和 HTTPS)。