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

背景

現客戶在一臺物理機上部署了多套系統,須要實現每套系統都有一個獨立訪問域名,不能帶端口。以前的方案就是經過context root進行路由,好比A系統訪問路徑爲 http://definesys.com/A B系統的訪問路徑爲 http://definesys.com/B,這樣有兩個問題html

  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,增長如下配置項nginx

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字段,只要保證上游服務器名稱和訪問的域名一致便可。代理

相關文章
相關標籤/搜索