
過去一段時間,我已在網站速度優化上花了太多時間和精力,研究過很多方法,包括不同的WordPress plugin和CDN,以我的能力,已經到了瓶頸。然而,最近接觸到 Nginx 原來有一種動態模塊的方法,在不需要重新編譯 Nginx 的情況下增加模塊,於是便想試試增加一個ngx_pagespeed的動態模塊。
什麼是動態模塊?
Nginx的模塊可為它增加不同的功能,類似於Wordpress的plugin,而模塊又分為靜態模塊(Static Module)和動態模塊(Dynamic Module)。安裝靜態模塊需要重新編譯整個Nginx,而且一旦安裝好後就無法隨時停用該模塊,如要停用,則需要在去除該模塊的情況下再重新編譯一次Nginx,可見靜態模塊不夠靈活。針對這個問題,Nginx自1.9.11版本後新增了動態模塊功能,只要在現有的nginx.conf裏的開頭加一句「load_module path」即可。
如何安裝ngx_pagespeed動態模塊
步驟一:下載ngx_pagespeed模塊
這個沒什麼好說的,從 github 下載最新版的 ngx_pagespeed 即可:
https://github.com/apache/incubator-pagespeed-ngx
步驟二:使Nginx Pagespeed支援ARM64
第二步才是關鍵,因為 ngx_pagespeed 太久沒更新了,即使是最新版也並不支持 ARM64。有個熱心人彌補了這個缺陷,請到以下網址查閱詳細方法:
步驟三:下載Nginx源碼
通過 nginx -v 查看現有 Nginx 的版本,然後下載相應版本的源碼,然後利用源碼中的 configure 編譯動態模塊。
步驟四:編譯 ngx_pagespeed 動態模塊
編譯動態模塊需要在現有的 Nginx 環境中編譯,所以首先用 nginx -V 查看現有Nginx的編譯設定,將全部內容複製,去除其中所有「–add-module=path」的內容,再加上所需編譯的新模塊「add-dynamic-module=path」(path為該模塊所在位置),然後 sudo ./configure ,最後是 make (不使用make install)。
如果 ./configure 的內容錯誤,把「load_module」加入nginx.conf後,會導致「not binary compatible」錯誤出現。網上現有的教學,大多都沒有把 ./configure 應該加的內容說清楚,導致很多人都出現這個問題。
make 完後,在Nginx源碼裏的objs文檔夾裏,就能找到相應動態模塊的 .so 檔案,將其複製到現有 Nginx 文檔夾下,這個文檔的所在位置即爲「load_module path」的path。
以我安裝 ngx_pagespeed 為例,我在 Nginx 下創建裏一個「modules」文檔夾,將編譯好的 ngx_pagespeed.so 複製到此處,最後在 Nginx.conf 加上這一句:
load_module modules/ngx_pagespeed.so;
如果已使用其他的網站優化手法,比如Wordpress安裝了W3 Total Cache之類的plugin,或使用了Cloudflare之類的CDN,ngx_pagespeed模塊帶來的效果其實並不大,甚至可以說沒有任何變化。Nginx的動態模塊雖然比靜態模塊方便了很多,但因為網上教學大多都沒有說清楚,讓我這個門外漢不斷碰壁,弄了那麼久才弄好,最後一測試pagespeed,覺得其實白搞了,只是這個過程中也算學到了點東西。以後若真有需要安裝個動態模塊,這個過程就清楚很多了。
參考文章:
如何在Ubuntu 18.04,Ubuntu 20.04和Nginx上安装PageSpeed模块