本文是我首次在稀土掘金发表的第1篇文章,感谢你的阅读。
前言
最近使用ECS服务器部署Centos系统搭建了一个线上个人博客类网站,由于不是很懂前后端项目有哪些,不懂一个项目工程的是如何从0到100的开发过程,索性使用了目前使用人数最多的CMS系统:WordPress,WordPress (简称 WP)可以说是全球最流行的博客系统了,没有之一,世界上约 30% 的网站都是基于 WordPress 搭建的。
不用亲自造轮子,直接扫码骑共享单车。。。
使用的是LNMP环境,比较简单。。
正文
起因
起初在编辑网页的时候,发现部分按钮不能很好的点击,没有反馈,但是又没有用到,所以就没有管他,只要有用到的功能没受影响。。
故障现象
然而,当我使用了可视化编辑器的时候,发现可视化编辑器也不能使用了。可视化编辑区白屏,没有完全加载出来,导致我无法使用可视化编辑器编辑排版网页。
主题--自定义预览区无法渲染,一直载入中,也没有任何提示。使用小工具等修改的方式全都无效。
包括预览其他主题,切换到默认主题,也都无法正常渲染。
查看网页开发者工具栏的控制台,发现很多报错,这些报错在后台所有页面都有,而在前台就没有。
其中的几例报错:
Uncaught TypeError: Cannot read properties of undefined (reading 'hooks')
Uncaught ReferenceError: wp is not defined
Uncaught TypeError: Cannot read properties of undefined (reading '__')
Uncaught TypeError: Cannot read properties of undefined (reading 'setLocaleData')
通过查阅WordPress博客文档得知,应该是某个地方阻止了js样式文件的加载,导致hookes不到。
于是开始尝试禁用、卸载所有WordPress插件,清空浏览器缓存,清空DNS缓存,更换浏览器等方法,以及重装WordPress,降低WordPress版本,重新还原到能自定义编辑时的设置、快照,但都不起作用,这过程很心酸,欲哭无泪,这过程耗费了很多时间心思,数据库,前后端代码,脚本语言,类对象等等啥的都看过了,但最后都没有解决,就差研究WordPress怎么从0到100了。(在心里欲哭无泪了很久---)
自己还在社区提了个沸点:求助,大佬们谁能帮忙解决一下呀,但是没有人解答,预算不足,无奈,只能自己解决。
思考
由于环境是在云上的,后面在本地搭建了同样环境的WordPress,想要复现一下好好排查,但是在本地搭建就没有这样的问题,什么操作都是畅通无阻。
由于在本地环境测试,没有网络消耗,开销值近乎为0,于是开始怀疑是网络原因导致的,才想到网站原来开启了CDN功能,而且CDN又有缓存回源机制,猜测应该是CDN对于后台类资源传输有问题,于是乎想到了在CDN方面下手,关于CDN的功能介绍,可参考云厂商相关产品文档说明。
解决方法
解决方法有两个:
其1,就是本机自己绕过CDN,也就是管理网站的那台机器,自己在用的机器,绕过CDN,那样,网站上的所有网页文件资源对于管理机器自己而言都是实时传输了,没有缓存回源的机制问题。
其2,就是直接在服务器上对网站自身进行配置管理,那样而言,数据回传都在服务器本地自己,也是没有网络原因影响的存在。
以上的方法2,对于我遇到的问题其实行不通,并不可取,虽然不失为一种解决方法,原因是服务器自己并没有图形化界面,而管理网站需要有图形化的浏览器,还要额外牺牲服务器性能资源,来安装VNC桌面环境进行管理,那样的话,如果服务器的性能配置比较高,则没什么影响,但是对于低配置低性能的服务器行不通,而且还很卡,还影响到了正常网站的运行,并且自己在本地的数据回传只能是IP形式,如果使用域名,服务器仍然需要向外部的DNS进行解析,那样数据还是要出去再回来,也还是有网络带宽开销,再并且,WordPress网站已经设置了限制,只能使用域名访问。
最后决定
于是乎,采用了方法1,就是本机自己绕过CDN,绕过CDN的方法有很多,其中之一就是将自己本机的hosts域名解析配置文件直接绑定源服务器IP。关于hosts域名解析,可自行baidu,有较为全面的介绍。
各个系统修改hosts解析配置文件的方法都不同,但原理都是一样的,直接在hosts解析配置文件里将源服务器IP与域名进行绑定,那样该机器在解析这个域名的时候,就能找到对应网站的IP地址。
以下为Windows系统示例:hosts配置文件一般位于系统盘的windows文件夹下:
C:WindowsSystem32driversetchosts
然后写入要绑定的域名和IP,最后保存即可。
192.168.1.1 www.example.com
至此,本机自己在解析对应的域名时,就能找到对应网站的IP地址,从而直接进行数据传输,无需经过CDN回源缓存,故障现象也得到了解决。
总结
这个问题看似原因以及解决的方法都很简单,但其实如果自己没有很好的思路方法去排查,去看待问题的话,终究也会是像没有导航一样的车在陌生的地方行驶,前方是怎样的路途,谁也不知道。
注意:如果你遇到的问题以及使用环境和我一样,再参考文中的解决方法,若否,则再另寻他法。
希望此解决过程的方法对骑了共享单车的项目有用吧,也希望对亲自造轮子的项目也有用吧。