nextcloud 是開源的網盤系統,這裡進行一些 定製改造 加快訪問速度。
這裡分為 3 大塊來分析需要優化的點:web 訪問體驗,php 性能優化,下載加速。
後兩者不是本文的重點,這裡說一下思路:
php 性能優化:進行 php-jit 加持和靜態化網頁處理來加速處理速度。
下載加速:下載是基於本機的 web 進行下載文件和傳輸的,這裡的思路是進行雲存儲,下載鏈接 hook 為 CDN 的下載地址進行加速處理。減少 web 主體服務的壓力。
web 訪問體驗問題這裡進行一些深入了解 nextcloud 的運作原理。
1. 通過 F12 調試工具發現 js 腳本數量多而且體積較大,因此這裡可以通過 js 遷徙到 CDN 下進行加速和減輕主體 web 服務器的壓力。
2. 跟蹤主頁響應的 html 頁面採取了 defer src 的方式進行 js 引用,證明出這些 js 腳本是可以外部 url 進行加載,這為 CDN 運作提供了可能。
3. 通過分析 php 代碼 html 中的 js 引用生成代碼主要位於 lib/private/TemplateLayout.php ,因此 js 的加速只需要從這裡動手即可。
4.nextcloud 默認是開啟了 http Content-Security-Policy , 由於資源要進行外聯到 CDN,因此這個策略需要修改一下。可以查找 php 代碼進行注釋掉。
CDN 加速採用七牛雲的對象存儲服務。因為對象存儲是不支持文件 + 目錄樹的方式訪問,只支持單 key,因此需要修改 php 中的 js 引用格式為單字符串
形如:nextcloud/core/js/dist/main.js修改為nextcloud_core_js_dist_main.js
關於 css 的加速問題,由於 css 的特殊性。這裡採取的處理方法是吧常用 css 按照加載順序進行合併到一個大 css 文件,然後對這個大的 css 進行 CDN 加速處理。
通過簡單的試驗 流量傳輸大頭已經從 web 服務器轉移到了 CDN 上面。
這裡的做法是一個 js 一個 js 進行分析原始 URL 而得出改造後的 URL,如下圖
再寫一個腳本,吧 nextcloud 目錄的 js 文件名轉換為上述格式,然後上傳 CDN 對象存儲即可。
由於 nextcloud 存在 codesign 因此需要查閱 code_signing.rst.txt 文檔來進行更新 codesign 或者修改源代碼吧 codesign 去掉,以能夠進行正常訪問。