本博客程序用的是Typecho,自从部署CDN之后,偶然发现本站的所有文章都无法评论,但当时也没太注意,今天无意假期有空决定好好审查修复一下。
为了方便测试,利用本站数据重新搭建了一个博客(等同克隆了一个),但没有部署CDN;经过对比测试,发现了第一个问题。
一、评论内容数据无法写入数据库。
问题原因:
处理评论数据的页面被CDN服务器缓存直接返回,评论POST请求根本没有到达源服务器,所以无法入库。
解决办法:
1.关闭腾讯CDN配置的过滤参数。[腾讯CDN->域名管理->访问配置->过滤参数配置->关闭]
![关闭过滤参数.png](https://qzone.work/usr/uploads/2019/05/1199704491.png#mirages-width=522&mirages-height=273&mirages-cdn-type=3)
2.关闭CDN评论处理页的缓存。[腾讯CDN->域名管理->缓存配置->新增缓存配置]
![配置过期缓存.png](https://qzone.work/usr/uploads/2019/05/980856211.png#mirages-width=1249&mirages-height=174&mirages-cdn-type=3)
之所以设置两个是因为本站开启了伪静态,我不知道对此有无影响,所以两个地址都设置了,设置0秒即不缓存,直接请求源站。
OK,到这里解决之后且生效之后,评论数据能够直接存入数据库了,但是又发现了第二个问题。
二、文章评论之后无法即时显示评论内容
问题原因:
还是因为CDN缓存的原因,CDN返回的之前没有评论时的老旧缓存数据。
解决办法:
解决办法有两种,第一种就是第一个问题的答案,但缺点就是,都不缓存了还干嘛用CDN?第二种,适当降低缓存有效期,评论之后跳转时增加参数直接请求源数据。
这里采用第二种方法。
1.关闭腾讯CDN配置的过滤参数。[同上]
2.降低HTML文件的缓存有效期,我这里设置有效期是一小时。[方法同上]
![HTML缓存.png](https://qzone.work/usr/uploads/2019/05/2932705056.png#mirages-width=1277&mirages-height=63&mirages-cdn-type=3)
3.评论之后跳转增加参数,修改Typecho源码文件,`/var/Widget/Feedback.php`,大概148行左右吧,改成如下图,代码解释:评论之后跳转回文章页面,加上了一个rand参数,值为评论ID。
![修改部分.png](https://qzone.work/usr/uploads/2019/05/3700801538.png#mirages-width=604&mirages-height=256&mirages-cdn-type=3)
文章小记:
因为刚开始对Typecho程序结构和运行机制不了解,与常见的MVC模式有区别,每次解决问题最花时间的地方就是研究Typecho和找问题,解决问题其实很简单...
好吧,黄天不负有心人,虽然花了两三个小时,问题得到了完美解决!