Calibre-web 个人图书库搭建记 19:给 Calibre-web 服务器减压

最近 Calibre- web 演示的网站的服务器压力比较大,每次开放游客浏览以后都会频繁出现502。经常出现这种情况,我尝试分析了一下,找到三个主要的原因。

0

第一个原因是服务器内存小导致的,服务内存只有512M,能勉强跑起来一些小程序,如果数据查询和访问量比较多,服务器必然会比较吃力。

第二个原因是Calibre-web程序设计的原因,很多请求是根据浏览器和访问特征返回数据,一个url可能返回不同的内容,并没有使用动态数据和静态数据分离,整体是一个动态网站,如果不进行改造,cdn内容加速都不能上。需要定制开发做相关的动态、静态请求的分离,把固定不变的内容进行缓存以后才能更少的减少服务器资源消耗。

第三个原因是因为网站开放访问,正常人类请求并没多少,但各种各样的爬虫(MJ12bot、DotBot、AhrefsBot)请求太过频繁,大部分服务器资源都消耗到了应对采集爬虫的访问请求了。

0

找到的原因就要进行优化,趁着周末,针对这几个问题做了一部分优化,这里记录一下基本的操作思路。

1、第一个原因很好解决,服务加配置,暂时不会搞,演示项目不需要投入太多的经费。加钱是不可能加钱的!!!

2、针对calibre-web 的程序架构,在可行的范围内对部分资源访问,通过服务器的 nginx 程序做一层服务器的缓存,减少动态请求和数据查询的压力。针对css,js,不需要动态登陆态的内容进行了nginx 反向代理缓存。

如果有时间折腾,还可以考虑改造代码,增加cdn配置。将静态资源请求都放到cdn服务。改动比较大,而且会导致以后无法升级新版本程序。暂时不加cdn。

这几个目录做了反向代理的缓存。
/download
/cover
/static

以下几个目录也做了缓存,因为我的calibre-web数据库已经不再更新,缓存一下不变了也没事,如果你还在更新数据库,不建议缓存这几个目录下的访问。
/author
/language
/series
/category

反向代理增加的代码示例如下(基于宝塔面板):

0

3、针对无效爬虫(MJ12bot、DotBot、AhrefsBot)和不节制的爬虫采取频次限制或直接禁止访问。通过nginx 识别爬虫请求来封禁爬虫访问。大量减少服务器开销。
nginx 站点配置里增加的代码如下:

if ($http_user_agent ~* “MJ12bot|DotBot|AhrefsBot|SemrushBot”) {
return 403;
}

0

经过一顿操作,把服务器高峰的负载5以上将为 0.3 以下。

0

参考资料:
如何限制百度等蜘蛛的抓取频率?使用nginx 限制百度蜘蛛抓取过快:
http://5656t.com/archives/1148

这些搜索引擎蜘蛛,需要屏蔽吗?
http://www.6ke.com.cn/seoxuetang/gjcpm/2020/0125/34362.html

nginx封禁垃圾爬虫,例如SemrushBot
https://www.webfree.net/1165/

搜索引擎蜘蛛标识大全和nginx封禁代码:
https://gist.github.com/hans2103/733b8eef30e89c759335017863bd721d

除了调优以外,最近还把calibre-web增加谷歌联盟的自动广告,增加百度统计代码。
因为测试谷歌广告时用的默认的calibre-web的模板,最近发现calibre-web另外的一套模板更好看,但设置以后与谷歌自动广告不匹配。暂时先不测试新模板了。等谷歌广告测试稳定以后再尝试更改模板训练新的广告。

calibre-web 网站是Python 实现的网站,通过Nginx 的反向代理实现的外网访问,现在谷歌联盟需要验证一个ads.txt 文件,但如果要在calibre-web目录下增加这种访问需要修改calibre-web的路由代码,代码中指定访问的路由和对应的文件。实现不够理想,还会破坏代码原有的结构。

使用nginx 直接写死到配置里实现容易一些,还不需要修改calibre-web代码。只需要把 ads.txt 文件放到指定的目录,做个映射就可以了。nginx 在反向代理代理之前增加代码如下:
location /ads.txt{
alias /www/wwwroot/www.XXXXX.com/ads.txt;
}
参考博客:nginx配置:静态访问txt文件:https://www.cnblogs.com/sanduzxcvbnm/p/11310316.html

这一系列文章并没有什么具体的技术细节,开了个QQ交流群(72239907),方便大家交流读书、技术问题、图书资源共享。如果有什么软件安装等问题也可以加 calibre 交流群的QQ群(72239907)进行交流。
点击链接加入群聊【爱读书 读好书 calibre】:https://jq.qq.com/?_wv=1027&k=5vYWQsV