2014-02-05 50 views
1

我剛開始使用CloudFlare「靈活的SSL」,這允許用戶在連接到我的服務器(當然通過CloudFlare)時擁有SSL。如何通過Nginx使用CloudFlare「靈活的SSL」PageSpeed過濾器

這裏的要求如何去:

遊客 < - 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,ins‌​ert_dns_prefetch;

那麼,怎樣才能讓我的Nginx的PageSpeed的資源返回爲HTTPS?當請求是http時,非https如何?

謝謝。

+0

重寫資源?你什麼意思?你使用一些輸出濾波器? –

+0

@MichaelTabolsky是的,這些是我目前使用的過濾器:'pagespeed EnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,combine_javascript,insert_image_dimensions,collapse_whitespace,sprite_images,ins ert_dns_prefetch;'。 而當nginx將這些資源的鏈接放在html中時,問題就來了,總是用http。 – Danny

+0

毫米,對不起,從未使用過這些。但我懷疑必須有一些URL重寫。另外,您可以嘗試在網址中省略模式。不能說,如果它在任何情況下工作,但我經常看到src =「// host.name/uri」 –

回答

3

只要CloudFlare的發送標準X-Forwarded-Proto頭,你可以通過簡單地使RespectXForwardedProto解決這個問題:

pagespeed RespectXForwardedProto on; 

如果還是不行,那可能意味着CloudFlare的不發送正確X-Forwarded-Proto頭。如果是的話,你可以嘗試啓用PreserveUrlRelativity

pagespeed PreserveUrlRelativity on; 

這將重寫URL,但保留其視爲相對URL(使他們與HTTP和HTTPS工作)。

+0

第一個選項不起作用,第二個選項似乎是一個選項,只有在不同的分支:/ – Danny

+0

經過幾個小時的過濾器和大量設置後,我發現我需要使用'MapOriginDomain'(http來https重寫資源)和'RespectXForwardedProto'。 – Danny