作者:田逸(sery@163.com)

有一个用阿里云的哥们来电,告知把云主机绑上弹性公网ip,访问其上的网站,正常;但把弹性公网ip解绑,用前端的haproxy转发,就报503错误。怎么实验都不行,于是我只好亲自上阵。


wKiom1ftDc-zPj2AAACPu-AuRPs491.jpg-wh_50

说明:阿里云vpc实例给的是私有ip,可以根据需要随时绑定公网ip。在本例中,调度器为haproxy,通过阿里云管理后台绑定了公网ip,同样,网络管理入口的实例也绑定了弹性公网ip。


我考虑的第一步,是先保证转发器后端的服务是正常的。后端服务为nginx + php,数据库单独,还需要连mongodb。


通过vpn拨号,连入内网,检查nginx和php的各项配置,跟别的机器参照对比,也没看见什么问题。然后,在本地的windows里边,对hosts文件进行域名和ip绑定处理,接着用浏览器访问站点,是正常的!由此可以基本确认nginx、php等没有问题,那么可能有问题的地方就在haproxy上边了。


登录haproxy所在实例,检查防火墙、seliux等,都是正常的。打开haprxoy配置文件,是照着前边的项目形式追加的,格式完全一样,也找不出问题所在。

wKiom1ftE1bzRDrxAAIuzJnv810354.jpg-wh_50

部分配置省略(不影响阅读)

wKiom1ftFEfTV-VtAAKzeldfdhI151.jpg-wh_50


尝试开启状态监控,从haproxy的状态监控页面看,是有请求通过啊。又担心是机房白名单的问题,去备案网站查询,有备案许可。再把该实例绑定弹性公网ip,用此ip绑定域名,访问确实是正常的,这可以证明,应该不是备案或者白名单的问题了。我有寻思,是不是php哪里有问题?就打开nginx配置文件,找到该站点的根文档位置,在它的下边写了个test.php,内容为“<? phpinfo(); ?>”,访问请求经过haproxy居然可以访问到站点,但其它页面就不行,好邪门呢!


试了好多种方法,大半天过去了,还是没进展。我看小毛qq在线,就请他帮我搞一下。后来他把问题解决了,告诉我是index.php里边,有一行代码的冒号,用的是中文字符,改成英文的,一试,马上正常了。

wKiom1ftGJGzu4SOAALt9wjk9a4759.jpg-wh_50

这个错误,通过haproxy转发的时候,问题就出来了,但直接浏览器访问,就不会有这样的问题。感谢小毛的帮忙,不然我还真查不到这个细小的问题所在。