不知道各位站长有没有遇到过,搭建了宝塔的网站套了CloudFlare或EdgeOne等的CDN服务后,网站就出现了403无法访问的情况。
反正小森就有幸遇到过,本文就当做个记录分享,或许能帮助到你。
起因
事情的起因是站长使用的阿里云香港阿里云搭建的云盘服务,套用了CloudFlare的CDN优选服务,导致了站点时不时出现了403的情况。
后来站长又在另一个腾讯云的EdgeOne CDN服务又遇到了这种情况。
刚开始我还以为是服务器的宝塔面板出现了问题,尝试了修复宝塔面板、更新Nginx版本、删除并重新新建站点、配置HTTPS仿窜站和重启服务器的操作,发现都不管用。
直到站长发现了现在的宝塔面板如果域名解析了但未添加站点的话就会直接返回403页面,站长才意识到:“是不是CDN回源时宝塔没识别到站点呢?”。
原因
既然是宝塔面板Nginx没识别回源的域名到站点,那什么情况会出现这种情况?
难道是回源HOST 头不对的原因导致了宝塔面板Nginx无法识别到站点吗?
没错!它就是回源HOST端口的问题!
CloudFlare和EdgeOne都是通过HTTP回源的,但是我们都知道HTTP一般都是分为80和443端口的,其中443端口是SSL加密传输端口,也就是我们常说的HTTPS。
当你的源站点未配置SSL证书,站点就仅绑定了80端口,也就是没有配置HTTPS,当CDN回源HTTPS时使用了443端口,Nginx自然就会返回403了。
解决
知道了出现问题的原因之后,我们只需要根据问题处理就行了,既然回源未配置SSL证书的HTTPS 443端口会403,那么我们就不让他回源HTTPS不就解决了嘛。
然后下面就是两个CDN平台的解决方法了。
CloudFlare:
进入域名设置页面,在“SSL/TLS”菜单下的“概述”页面-加密模式板块,点击“配置”按钮跳转到“SSL/TLS加密”配置加密模式页面。
选择“灵活”选项,旁边的示意图内CloudFlare到源服务器中间的那把小锁消失,点击保存即可。
EdgeOne:
EdgeOne更简单,直接在添加域名时或编辑域名,将回源协议从“协议跟随”选择为HTTP协议就行了。
当然,如果你想要自己的源站更安全,就可以使用自签SSL证书或申请免费的SSL证书,再开启CDN的HTTPS协议回源进行安全的加密通信。
通过以上方案都可以解决使用CDN导致的403错误问题,希望对你有所帮助。