Exsi 中的两台虚拟机,Debian 系统,暂且称为 A 和 B ,均配置两块网卡,一内一外,不同之处是 A 同时做了个 DNS ,添加了一个内部使用的域 myserver.com,并配置为了透明代理做网关,内网地址为 192.168.1.1 ,B 用 nginx 做反向代理代理内部的其他 web server 对外提供服务,dns 设置为了 192.168.1.1 。

奇怪现象的产生是不定的,具体表现为 A 工作一直正常,B 代理的网站如果在内部机器上(比如 192.168.1.1 或者 .1.x )访问完全没有问题,同一个外部网段的机器访问也完全没有问题,但是其他网段就不一定了,有的能访问,有的会提示重置,ping B 什么的都是没有问题,只是访问 web service 会连接不上, lynx 会提示 cannot read document 。如果把 B 换个外网 IP,则偶尔会能正常工作一段时间,比如一天,或者一个小时,然后就连不上了,但这个 IP 放到其他服务器上是好好的,最初怀疑是上层路由器根据某种规则禁止掉了,但是又被否定了,因为同样的两外一台做反向代理的机器 C 就没有问题,这种困扰一直持续了好几周,尝试了各种办法都无法确认是哪的问题,你说 web service 的问题吧,没防火墙,没定规则,而且内网访问就没事,你说路由器的设置问题吧,怎么 C 就没事呢。

上周在视图修改 nginx 的反向代理配置的时候,眼光盯了下 upstream server 的配置语句,留意到都是使用的内网域名,即 xxx.myserver.com 的字样,记得网上大部分资料这部分都是直接提供的 ip 地址,当时还想呢,当内网机器数量比较多的时候,使用 ip 地址多不好记啊,弄个 DNS 用来解析内部域名多方便,所以才有了 A 这台 DNS,也正是这个原因,才把 B 的 DNS 设置为了 192.168.1.1 。想到 nginx 可能会使用反向解析,会不会是DNS的原因呢,于是尝试把 B 改为实际 DNS ,然后把 B 反向代理配置文件中的 xxx.myserver.com 都改为内网对应的 IP 地址 ,重启 nginx ,一切正常,不能访问的问题解决了。晕倒,难道是 A 做的 DNS 的问题?于是重新试验了下 A 的 DNS ,正向和反向工作均没有问题,这就奇了怪了。

头疼,反正问题解决了,先凑合用吧。