2

一、前景提要

最近在工作中遇到一个坑,之前配置了很多次nginx虚拟主机及多级代理,自以为对这块已经很了解了,但前几天在和京东做对接的时候,发现完全被整蒙圈了,配了多个虚拟主机,不知道默认走那个了,多加一个又会影响之前的,少加一个,新的接口又不生效,后来又分析了下,之所以会乱,也是因为调用方也是多样的,有直接IP的,有直接域名的,还有二级代理的,nginx虚拟主机对访问的地址有严格的匹配规则,好多人都说ip和域名不都是同一个机子吗,但对于nginx虚拟主机来说,IP和域名是两个不同的server。

二、真实环境简述

A1侧(调用方1)

A2侧(调用方2)

A3侧(调用方3)

B侧(中转侧,直接IP)

C侧(服务代理提供侧)

D侧(后端服务)

A1侧通过B转到C侧,再通过C侧调用D侧后端服务

A2侧访问C侧IP,再通过C侧调用D侧后端服务

A3侧访问C侧域名,再通过C侧调用D侧后端服务

三、虚拟主机配置注意事项

1、建议如果配置了include ,则nginx.conf 里不要在添加server,不然include 放在server前和server后也有影响;

2、如果之前已经在nginx.conf 里配置了server,后续要添加采用include添加server,时,include如果放在server前面:情况如下:

2.1 如果nginx.conf 里只有一个server,则只要访问的url能到达该nginx主机,都会走这个server匹配

2.2 如果nginx.conf里有多个server,如果url的host地址匹配该server_name 则走该server,如果不匹配,则走第一个server;

2.3 如果nginx.conf里include指定的vhosts目录里有****.conf,则会优先匹配该conf文件的server,如果vhosts有多个conf文件,则匹配不到的都默认走该vhosts目录下第一个文件,并且不会走nginx.conf文件里的server

3、如果之前已经在nginx.conf 里配置了server,后续要添加采用include添加server,时,include如果放在server之后:情况如下:

3.1 如果vhosts目录没有conf文件,则默认匹配nginx.conf 里的server,且第一个server为默认匹配

3.2 如果vhosts目录有conf文件,如果匹配到vhosts目录下的server ,则走该配置,如果匹配不到,则走nginx.conf里的第一个server

综上,如果采用include配置多虚拟主机,建议nginx.conf 文件里不要再配置server,统一配置到vhosts目录下去

4、二次跳转如何配置server

经多次实验,不管中间经过几次代理,最终的nginx匹配只认原始的url地址,如果目标nginx有该server则匹配,没有则走默认


认真做自己
7 声望1 粉丝

下一篇 »
dubbo优雅宕机