【調教Nginx】在ARM64的VPS上安裝ngx_pagespeed動態模塊

如果已使用其他的網站優化手法,比如Wordpress安裝了W3 Total Cache之類的plugin,或使用了Cloudflare之類的CDN,ngx_pagespeed模塊帶來的效果其實並不大,甚至可以說沒有任何變化。
Google Pagespeed

過去一段時間,我已在網站速度優化上花了太多時間和精力,研究過很多方法,包括不同的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。有個熱心人彌補了這個缺陷,請到以下網址查閱詳細方法:

https://gitlab.com/gusco/ngx_pagespeed_arm

步驟三:下載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模块

Default image
陳牛
陳牛,曾先後於《明報》、《端傳媒》、《香港01》任職,為《號外》、《就係香港》等媒體擔任特約記者、撰稿人。
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
Shares
0
Would love your thoughts, please comment.x
()
x