前言
博主是一个广西人,回到广西以后,发现自己的cdn解析到了德国,我的网页卡的不行,今天想来解决
一下这个问题
路由追踪
我先用了ipip.net的besttrace软件,使用本地dns的时候,正常解析到广州,然后就直接飞德国了
哪有这样玩的dns啊
我觉得问题多半出在广州这个dns服务器上,他已经把cloudfront的香港域名解析给ban了,于是我从
网上找了一个绕一点的dns服务器,香港的
虽然比之前好了,但是还是没有解决问题,我的目的是让cdn直接分发香港的边缘节点给我,那该怎么
办呢,我想了一下,如果是因为cloudfront被拒绝解析了,那么我换一个域名去解析这个cloudfront不
就好了,于是去试了一下。还是不行,痛苦,先埋个坑吧
目前已经手动将cloudfront的节点ip设置成hosts,在speedtest里让延迟有所改善了,就这样吧,太玄
学了
bing重定向问题
昨天解决了类似的问题,这个问题是bing重定向过多
在国内使用魔法上网访问bing的时候,不管是美国的服务器还是香港的服务器都会出现bing重定向过
多,但是我自己亚马逊的服务器就不会出现这个问题
问题排查
ipv6导致的重定向
我登陆服务器curl了一下bing
均会返回这个重定向
但是亚马逊服务器就不会有这个问题
通过比对发现aws没有ipv6地址,而其他两个服务器都有,我就在猜测会不会是这个问题导致的重定向
尝试
|
|
这下没有返回重定向了,而是直接有结果
于是我把魔法的监听地址从0.0.0.0改成127.0.0.1
重新试了试
仍然重定向
nginx导致的重定向
我的魔法部署和亚马逊云的魔法部署还有一点不一样是nginx的配置不相同
前者的魔法使用了nginx反向代理+ws+协议
后者的魔法使用了fallback到nginx
而且我的nginx配置可能也有点问题
于是我比较了一下两者的nginx的配置
可以看到X-Real-IP写的是$remote_addr
而$remote_addr表示的是addr是连接到代理服务器前,主机的真实ip地址
我觉得是X-Real-IP的问题
还有个X-Forwarded-For的问题
这X-Real-IP的header定义是这样的:
在http经过代理服务器时,由于可能需要获取客户端自身ip的逻辑应用,于是有了X-Real-IP
将客户端自身ip加入到请求头中
X-Forwarded-For的定义和X-Real-IP的定义很相似
但不同的是X-Forwarded-For有多个ip
每当经过一个代理节点以后,就会将代理节点的ip添加到X-Forwarded-For中
例如
客户端ip为1.1.1.1
代理服务器ip为2.2.2.2
客户端通过代理服务器访问 www.baidu.com
www.baidu.com收到的header应该是这样的
|
|
但注意,X-Forwarded-For和X-Real-IP是可以篡改的
即回到刚才的话题
我的nginx配置可能是写上了自己的客户端ip,于是被bing识别到geoip属于cn,跳回 cn.bing.com
但又因为当前代理服务器的ip已经作为代理,实际后端收到的请求ip还是代理服务器的ip
又触发了跳转到 www.bing.com
于是就反复横跳,出现了这个问题
当然以上都只是我的猜想,我把nginx配置改成了亚马逊的nginx的配置
现在变成了偶尔可以正常访问,但是还是会出现重定向的问题
我索性把X-Forwarded-For和X-Real-IP去掉
问题好多了,但是还是会重定向
魔法自带的dns问题
我把魔法的客户端和服务端配置都整改了一遍,其中服务端不使用nginx代理
配置如下
|
|
客户端使用了客户端dns本地解析(就是这一步坑的,之前没发现)
虽然已经配置好了但是问题依旧
我就在想会不会和dns解析的地域有关系呢
于是我把客户端dns给去掉,问题居然解决了
总结
一般都和魔法的dns解析策略有关系,只要好好配置就可以轻松解决,不会踩那么多坑