加快stackoverflow等国外网站的访问速度


Complain & Why

上网查资料时,常常会找到国外网站上的资料,比如stackoverflow、Google Groups等,感谢国家感谢党,得益于强大的GFW,我们通常得等上几分钟才能打开页面,而且打开的页面还常常残缺不全(CSS没载入)。

要不怎么说中国人能忍呢,这么多年过来了,我居然没被气吐血。。。

最近资料查得特别多,浪费在等待上的时间也特别多,而且漫长的等待后,给我的也只是一个很难看懂的残缺页面,让我十分郁闷。越想越觉得不对劲,我一勤勤恳恳的码农,满怀敬畏地去想多了解世界先进技术,这有错吗?招惹谁了我?!

How

抱怨是没有用的,还是想想怎么解决要实际点。

常规方法

  1. 有钱的主,不用说,直接就VPN了,您继续在墙外逍遥吧,哥羡慕嫉妒,但不恨;
  2. 会折腾点的,可以搞个Google App Agent之类的,每天免费流量也基本够用了;

我的山寨手段

如果VPN太贵,GoAgent太麻烦,那就试试我这种方法吧。

  • 找到网站载入慢的原因

    首先,在Firefox或者Chrome中打开一个新标签页,然后先打开开发者工具,这时浏览器底部会出现一个调试面板,点击选择面板中的“Network”标签,然后载入想要访问的网址(这里是http://www.stackoverflow.com),这时可以看到面板中实时显示正在载入的资源以及它们的载入情况,见下图:

    stackoverflow.png

    从图片中可以看到,“9HWwT.png”等几个资源正处于“pending”状态,即还没数据(或者没下载完)。如果资源过了一两分钟还没能载入,那么这就是导致网站迟迟打不开的原因了。鼠标悬停到这个资源(“9HWwT.png”),就会弹出这个资源的URL(在此是:i.stack.imgur.com/9HWwT.png)。在本机上ping这个资源的域名(i.stack.imgur.com),会发现ping不通或者丢包率非常高,怪不得网站老载不进去呢!

  • 找到可用的IP

    接下来,需要找到目标域名的一个访问速度较快的IP,通过hosts文件做静态绑定。具体方法为:

    • 利用nslookup命令
      $ nslookup i.stack.imgur.com
      Server:         202.96.134.33
      Address:        202.96.134.33#53
      
      Non-authoritative answer:
      i.stack.imgur.com       canonical name = cf-ssl11496-protected-i.stack.imgur.com.
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.31
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.34
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.184
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.32
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.184
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.33
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.34
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.35
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.32
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.36
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.6.33
      Name:   cf-ssl11496-protected-i.stack.imgur.com
      Address: 103.31.7.35
      

      从结果列表中,找几个ping一下,选择访问速度最快的那个作为我们要绑定的IP。

    • 通过在线网站,如Site24x7等找到能正常访问的IP
    • 想办法翻墙出去,到墙外找一些IP,然后在墙内测试,挑出能用的那些
  • 通过修改hosts文件绑定域名和IP

    将通过上面方法找到的能用的IP(如103.31.6.35)与之前不能正常访问的域名(i.stack.imgur.com)做静态绑定。具体方法就不用怎么说了,各个系统的方法不尽相同,而且网站上也有大把介绍的文章。

    # /etc/hosts
    103.31.6.35 i.stack.imgur.com
    
  • 备注

    这种方法会带来两个问题:

    1. 破坏了原有网站的负载均衡。不过我们是小众用户,这个给网站带来的影响应该是微乎其微的
    2. 绑定的IP可能会失效(smarthosts中绑定的很多网站都无法访问了,就是这个原因)。这时需要我们手动再绑定一次。当然,完全可以写一个脚本,当发现IP失效时,运行一次便自动更新。

    另外,根据我的测试,大部分情况下,载入不了的资源都不是主要资源(比如facebook的账号链接,google的广告统计接口等),应对这种情况,可以直接将这些域名指向一个无效IP,使得请求资源时马上返回错误即可。虽然感觉有点邪恶,但是页面加载速度真的快了很多有木有!

Leave a comment

Your email address will not be published. Required fields are marked *