一次排查ToranProxy的教训

由于公司的开发内网无法联网,之前我在公司内网维护了一个ToranProxy,用来管理我们的PHP组件包,以及方便大家应用第三方的PHP包。

今天有其他部门的同事反馈这上面的包用不了了,而以前他们用的时候是正常的。

由于这个东西我很久没弄了,翻出以前的笔记大致看了一下,也没啥头绪,猜测应该是包下载的地址有问题,内网无法访问到。所以首要任务是找到这个包具体是去哪个地址下载的。

然后我就一头扎进了源码里面,去跟踪调试。而很郁闷的是,ToranProxy的作者,在代码里面基本没写什么注释,全靠自己猜~~

就这样搞了半个小时,还是没啥头绪(其实自己当时有其他事情想要做,心也不在这边,有点抵触情绪了,因此效率极低)。

后来回过头再仔细看了一遍之前的笔记,发现这个工具自身是有记录日志的!

然后打开日志文件,里面很清晰的已经记录了具体发送的最终url,是类似这样的一个地址:

http://api.github.com/repos/illuminate/contracts/zipball/22bde7b048a33c702d9737fc1446234fff9b1363

然后我将这个地址代理到内网,发现还是不行。单独在内网服务器请求这个接口,发现被重定向到了https的443端口。原来github.com默认已经将http协议永久重定向(301)到了https协议。

至此,问题确定了。

因为据同事反馈,之前是好的,最近才不行了,那么我猜测可能是如下原因:

1、近期这个组件迁移到github了,所以以前ok,现在不行了

2、github的https永久重定向是最近才做的

但是我发现现在不止某一个包,而是基本上全部包都没法用了,那么上面1就说不通了,不可能所有包最近都从其他源转到了github.com;而上面的2也不大可能。

按理说我们配置了composer的国内镜像,应该包都从files.phpcomposer.com过来才对,难道这个域名最近都转到github.com了?

然后我看了下中国镜像的官网,发现有这样一个提示:

composer维护

到这里,原因终于确定了:

我们的包同步流程是类似这样的:

composer install ->请求我们内网代理服务器->通过nginx将请求转发到外网->访问中国镜像

因为github将http协议永久重定向(301)到了https协议,而https协议无法通过nginx转发,所以现在内网就用不了了。

那我们只能静静等待中国镜像恢复了☺。

今天这个问题,给我最大的教训就是:排查问题,记得先从日志入手,不要盲目跟入代码。

日志在解决问题的过程中太重要了,切记。