改造nextcloud以支持CDN加速
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去掉,以能够进行正常访问。