本文最后更新于 2019-03-18【1815 天前】,文中所描述的信息可能已发生改变,请谨慎使用。如有问题或建议,欢迎在文章底部留言参与讨论!

对于一些服务器的带宽比较小或者服务器在国外的网站而言,为了加速网站访问,有时会启用 CDN 进行网络加速。然而,有时候,CDN 配置不对会导致网站出现各种问题,今天,博主就介绍一个常见的问题及其解决方案:无法进管理后台或者无法评论。

原因

对于静态资源,如 html、js、css、jpg 等,CDN 加速的时候是把网站内容缓存到 CDN 节点上,用户访问的时候,不需要从源站获取,只需要从 CDN 节点上获取即可,从而实现网络加速。但对于动态内容,尤其是涉及到数据库交互的,CDN 节点上没有想要的资源,必须从源站进行获取。但如果设置仍然采用静态资源的方式进行缓存到 CDN 节点,用户访问的时候无法回源,那么就会出现问题。

对于 Typecho 或者 WordPress 等建站程序,进入管理后台,或者进行评论,都是需要进行数据库操作的,进入管理后台需要读取数据库,评论需要写入数据库,如果无法正确回源,这个数据库操作就无法进行,就会导致无法进入管理后台、无法评论。

上述原因来自博主个人理解,如有不正确还请各位路过的大佬进行指正。

解决方案

既然知道了原因,那么解决起来就非常容易了,只需要让动态内容正确回源即可,这里根据各家 CDN 的不同,可能需要进行两个操作,一个是不缓存动态内容,另一个是让动态内容的请求回源。

不缓存动态内容

在 CDN 的设置后台不缓存内容,方法是设置动态内容文件不缓存或者缓存时间设置为 0。

又拍云 CDN 为例,设置动态内容不缓存。在 CDN 管理 - 缓存控制 - 管理 - 不缓存规则里添加规则:
首先,按照规则,添加以 php 等为后缀的动态文件不缓存:
又拍云设置动态文件不缓存
为了加层保险,我们把管理目录也设置为不缓存,对于 Typecho 而言,是 admin 目录;对于 WordPress 而言,是 wp-admin;对于其他的程序,根据自己的需要自行添加:
又拍云设置文件夹不缓存
最后,规则如下:
又拍云设置不缓存

由于在又拍云 CDN 中,不缓存规则具有优先权,配置到这里基本上差不多了,如果不放心还可以按照下面的教程,在又拍云里设置缓存时间为 0.

腾讯云 CDN 为例,由于没有不缓存的设置,所以变通方法是将动态内容缓存时间为 0。
和上面一样,将以 php 等结尾的动态文件的缓存时间设置为 0 :
腾讯云设置文件缓存时间为0
同样的,将管理目录的缓存时间也设置为 0:
腾讯云设置文件夹缓存时间为0
最后的缓存规则大致如下:
腾讯云设置缓存

在配置缓存时,有几个注意的地方:

  • 文件匹配的规则,由于各家 CDN 的规则不同,多数时候不一样,还请按照相应的提示或者文档进行设置;
  • CDN 可能是用列表中配置项的顺序来确定优先级,各服务商采取的顺序可能不同,或者列表底部的优先级大于列表顶部,亦可能反过来,需要注意下。
  • 如果不熟悉,尽量不要配置全局缓存,不要缓存 html、html

回源设置

有时 CDN 为了极致加速,会将一些状态码如 301/302 等,不返回给用户,直接跳转获取资源,这会在进行登陆时导致一些问题。如在腾讯云 CDN 的回源跟随 301/302 配置中,开启回源 301/302 跟随后,节点回源请求若返回 301/302 状态码,则直接跳转获取资源,不会返回 301/302 给用户。详细解释:https://cloud.tencent.com/doc/product/228/7183

为了避免 CDN 将登陆时的跳转不返回给用户,我们需要关闭回源 301/302 跟随。仍以腾讯云 CDN 为例,在 CDN 域名管理 - 回源设置中,取消勾选回源跟随 301/302:
腾讯云回源设置

补充下,又拍的设置在缓存控制 - 参数跟随

又拍云回源设置

最后

知识有限,可能有些地方讲的不对;文笔有限,可能有些地方没有描述清楚,还请各位多多包涵,希望本文能帮助到大家。

文中提到的腾讯云又拍云都有免费的 CDN 额度,足够一个小博客使用,欢迎大家去体验 CDN 加速。

文章目录


推荐使用:阿里云 云翼计划学生优惠、ECS、轻量应用等产品与服务【 点击注册

本文作者:Quanyin Tang

本文链接:网站启用 CDN 后无法进管理后台或无法评论的解决方案 - https://www.imtqy.com/cdn-error.html

版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Quanyin 所有,未经允许禁止转载,经授权转载请注明出处!