Nginx 按主机名(Host)路由配置

服务器

浏览数:79

2019-9-7

AD:资源代下载服务

背景

现客户在一台物理机上部署了多套系统,需要实现每套系统都有一个独立访问域名,不能带端口。之前的方案就是通过context root进行路由,比如A系统访问路径为 http://definesys.com/A B系统的访问路径为 http://definesys.com/B,这样有两个问题

  1. 不能使用顶级域名访问,需要带上一个context root,对于系统的推广很不利,不容易记,也不美观。
  2. 有些系统前端资源访问采用绝对路径,这样路由就会出现资源找不到的问题,需要前端做调整,对于产品级系统,基本不现实。

以上的方案是基于context root做路由,如果能够基于Host做路由,就解决了以上问题,什么意思呢?访问A系统域名为 http://A.defiensys.com,访问B系统的域名为http://B.definesys.com,后台代理通过http的Host字段进行路由。确定方案后,选择了Nginx作为反向代理服务器,下面介绍相关配置。

实现

配置上游服务器(upstream)

假设有两套系统,OA和HR,需要配置的访问域名分别为 http://oa.definesys.comhttp://hr.definesys.com,修改 nginx.conf,增加以下配置项

upstream  oa.definesys.com{
              server 192.168.1.10:8080;
    }
upstream  hr.definesys.com{
              server 192.168.1.10:8081;
    }

这两个域名需要在DNS中配置好,本地可以修改hosts文件进行测试。

配置路由

修改 conf.d/default.conf 增加路由配置,当然你可以可以在conf.d目录下新建一个 *.conf 文件,nginx会默认引用该目录下所有.conf后缀的文件作为配置项。

location / {
      proxy_pass http://$host;
      index  index.html index.htm;
}

$host表示http头上的Host字段,只要保证上游服务器名称和访问的域名一致即可。

作者:wls1036