最近在生产遇到了一个比较棘手的问题,事情经过是这样的,我们的一台WEB服务器作为一台出口服务器使用的是Nginx,主要用于对接第三方系统,因为要访问第三方的域名,我们这边需要先申请网络策略,在申请网络策略的时候考虑到可能一个域名有时会对应多个IP的情况,为什么会对应多个IP呢?有的小伙伴可能会有疑惑了,正常情况下不是应该一个域名对应一个IP吗?下面我为大家讲解一下为什么会对应多个IP。

一个域名对应多个IP的情况是看提供服务方自己的策略了,有的系统会考虑到运营商的问题,那么就会根据目前,移动、联通、电信这三家运营商提供三个对应的IP,但是IP对应的域名都是一个,为什么要这么做呢?就是因为考虑到如果我一个运营商的IP如果出现问题,导致服务无法接收请求,那么就会切换到另一个IP上面,这样就不会出现服务因为一些极端问题不可用,当然有三个IP也不是全部都用上,会优先使用一个运营商的IP。

那根据上面说的情况就会出现一个情况,就是我们调用其他系统的服务需要经过防火墙什么的,如果把这些IP都配上但是不能解决主要问题,为什么不能解决主要问题呢,因为如果服务方又增加了,或者有减少了IP,对与消费方来说每次都需要服务方给我说下,然后我这边每次再改下,就会很麻烦,所一我们在对接第三方的时候只配了访问到第三方域名的网络策略,然后根据服务器的DNS解析域名拿到所对应的IP,这样就不会出现上面所出现的问题。

但是我们在配上域名的策略后发现telnet域名加端口是一直都是通的,但是telnet域名对应的IP加端口只有在先telnet域名之后才能telnet通,停止半个小时左右先telnet域名所对应的IP加端口就不通了,对与这个问题在生产上找了好长时间也没找到具体问题,查看了服务器的DNS发现也是配置的没有问题,实在没办法了,请教了一下公司的其他同事,通过了解情况后同事说了一个,你们nginx没有配置文件中没有配置resolver参数,然后又给我们加了一段配置说替换一下试试,代码在下面:

server{
        listen       443 backlog=65535;
        listen       [::]:443 backlog=65535;

        proxy_connect_timeout 15s;

        access_log logs/stream.log basic;

        ssl_preread on;
        resolver 114.114.114.114;
        proxy_pass $ssl_preread_server_name:$server_port;
}

加上这块配置后确实好了,如果你们有遇到这种情况就试试吧!