1. 该用户任何公网都能打开,就是访问不了公司的网站,先远程到客户电脑查看网络,ping我们公司网站地址,发现是可以正常解析出IP的,而且IP ping不通(公司服务器没有禁用icmp协议) 排除DNS问题
2. 检查服务器上的iptables和firewalld,发现都没有禁用任何IP对服务器的https(443)端口的访问,排除服务器端防火墙问题
3. 由于公司服务器是华为云的ecs,检查ecs的安全组,发现443端口是对所有地址开放的,排除安全组的问题
4. 总结出服务端没有做任何限制,但是客户端就是访问不到,怀疑是客户的网络环境有问题,协调客户去和运营商沟通未果
5.既然客户网络能访问其他公网地址,说明只是对部分区域网络访问不了,所以使用cdn应该可以解决这个问题。
CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN 的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影响。
CDN 利用全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求。服务器中如果没有用户要访问的内容,会根据配置自动从原服务器抓取相应的内容并提供给用户。 IPTV 可利用 CDN 为用户提供 VOD 业务,通过 CDN 把视频内容分发到靠近用户端的 CDN 节点后,可以在一定程度上保证端到端的服务质量。
6. 通过华为云控制台开启CD
7. 添加完域名之后,页面会生成一条域名记录
8. 此时状态还不是已开启,需要修改域名解析,将解析结果指向我们配置CDN的CNAME值
8. 等待几分钟,等DNS服务器刷新成功后,回到CDN页面查看前面添加的记录的状态变成了"已开启",说明CDN配置成功,访问我们网站没问题,然后ping网站地址,IP已经不是我们服务器的公网IP了,说明CDN的镜像服务器已经生效了,回到客户电脑上,访问我们网站,可以正常打开了,解决问题
使用CDN发现的坑:
由于CDN是客户端访问镜像服务器,再由镜像服务器访问源服务器,将请求的数据返回返回给客户端,同时将数据缓存到镜像服务器。因此当有新版本发布时,需要及时清除CDN的缓存,否则客户端访问时,将会访问到CDN的缓存中,造成请求的页面还是老版本的界面
解决办法:
华为云提供两种方式刷新CDN缓存, 手动刷新和调用API接口刷新
手动刷新:
调用API接口刷新:
1. 打开这个地址访问华为云的API接口调试页面
https://apiexplorer.developer.huaweicloud.com/apiexplorer/sdk?product=CDN&api=CreateRefreshTasks&version=v1
2. 选择自己擅长的语言, 将右边的代码复制出来, 我选的是python,保存为flush_CDN.py
先安装华为云模块 pip install huaweicloudsdkcdn (需要python版本为python3)
执行python flush_CDN.py
windows下安装python直接官网下载python3的exe包下一步下一步安装即可
centos7默认安装的是python2.7.5, 安装python3可以查看这个博客 centos7安装python3