網頁壓縮亂碼 – Lighttpd gzip php, js, css, html, plain

蛙齋速度慢的原因雖然有很大部份是在VPS的速度,在沒有經費可以提高VPS花費的情況下,只好從網站的優化開始做起,小蛙在Google網站管理員工具中看到一個「網站效能」的選項,裡面提到了可以安裝Firefox的plugin來測試網站的效能,小蛙點了安裝之後,瀏覽網頁的時候按下F12就可以看到Firefox下面的Firebug最右邊多出了一欄「Page Speed」。

測試之後的結果發現在「使用瀏覽器快取」跟「啟用壓縮功能」的部份是黃色驚嘆號,也就是還可以加強的部分。小蛙記得前一陣子就有啟用lighttpd的compress功能,在firebug下面也可以看到Content-Encoding: gzip了,為什麼還會在「啟用壓縮功能」的這個項目不符合呢?Google了一下發現lighttpd中設定的只有下面這些選項,沒有包含到PHP頁面。

"text/plain", "text/html", "application/x-javascript", "text/css", "application/javascript", "text/javascript", "application/x-javascript"

這篇文章小蛙記錄一下整個設定的流程,主要分成兩個部份,分別是lighttpd.conf以及php.ini。(參考資料:【L】設定Gzip – Lighttpd & PHP @ Ching Wei : This is My Life – 工作、攝影、旅遊)

/etc/lighttpd/lighttpd.conf

  1. 首先在server.modules的部份要打開“mod_compress”的選項,把前面的「#」拿掉就可以了。
  2. 設定快取儲存資料夾。
    compress.cache-dir = "/var/cache/lighttpd/compress/"
  3. 設定要壓縮的類型。
    compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css", "application/javascript", "text/javascript", "application/x-javascript")
  4. 重啟lighttpd,就可以透過firebug在剛剛設定的像css, javascript … 等檔案類型中看到「Accept-Encoding: gzip」的字樣。

/etc/php5/cgi/php.ini

  1. 這個php.ini的檔案可能會在不同路徑下,找不到的話可以下「locate php.ini」找找看,如果還是找不到可以在下locate之前先下「updatedb」的指令更新。
  2. 找到「;zlib.output_compression = On」的字樣,把前面的「;」拿掉。
  3. 存檔離開後,重新啟動lighttpd。

透過以上設定就可以讓lighttpd跟php都使用gzip壓縮功能,但是小蛙設定完之後卻發現IE跟Chrome開啟頁面的時候是呈現亂碼的狀態,小蛙百思不得其解,Google了一會兒,【程式】PHP – gzencode 後變亂碼 !! @ Ching Wei : This is My Life – 工作、攝影、旅遊PHP静态页面GZIP压缩乱码问题 @ SOSO問問 有提到會變成亂碼是做了兩次gzip造成的,小蛙改了半天,卻始終都還是亂碼(不同的theme可能會有不同情況)。
之後小蛙把矛頭指向Hyper Cache這個套件(因為發現這個套件下面有很多跟gzip相關的字眼),查了一下發現,原來在安裝完Hyper Cache的時候,預設狀態中「Enable compression」是開啟的,所以造成壓縮兩次的情況,只要把Enable compression關掉就可以了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *