首頁 > 軟體

nginx多域名轉發的實現

2023-03-05 14:04:23

前言

昨天碰到nginx做多域名轉發,簡單總結下nginx的使用,此文只是便於開發理解,並不會涉入太深的東西。有錯誤的地方,還望大家多指正。

基礎概念

DNS

DNS是Domain Name System的縮寫,即域名系統。DNS是internet的一項服務,一般叫域名服務或者域名解析服務,主要是提供網站域名與ip地址的相互轉換的服務。

域名和IP的對應關係

域名與IP地址之間是呈一一對應的關係,但多個域名可以對應同一個IP地址。就像一個人的姓名和身份證號碼之間的關係,顯然記憶人的名字要比身份證號容易的多。IP地址是網路上標識使用者站點的數位地址,為了簡單好記,採用域名來代替IP地址表示站點地址,DNS講域名解析成IP地址,使其一一對應。

DNS工作原理

在Internet上,一個域名要由兩臺域名伺服器提供“權威性的”域名解析。如果是國際域名,域名註冊管理機構就是Interinc,如果是國內域名,域名註冊管理機構就是CNNIC。所有的域名必須在兩個序號產生器構上註冊才能正常使用。

比如,你現在要存取一個網站,例如www.baidu.com,你的電腦需要知道這個站點的IP地址是多少才能存取。於是它會自動向您所在區域的“主控DNS”伺服器發出詢問,即“www.baidu.com”的IP是多少?如果該伺服器上沒有該域名的記錄,它會到上一級的DNS去查詢,一直重複進行直到找到為止,如果到最後一級仍然沒有找到。此時會到權威性的DNS上查詢,然後把對應的ip資訊返回給你的電腦。你的電腦就可以與www.baidu.com對應的伺服器進行通訊了。這樣一級一級的查詢被稱為“遞迴式”的查詢。

hosts檔案

hosts檔案是原生的一個無字尾的系統檔案,需要管理員許可權才能修改其內容。從上面DNS的解析過程可以看出,每次DNS解析可能會經過很多DNS伺服器的轉發最終才能獲取到真正的IP地址,這樣會很沒效率。所以在計算機的本地也有一個DNS解析檔案,即hosts檔案。當你把hosts中的 www.baidu.com指向正確的百度伺服器地址的時候,電腦會與正確的伺服器進行互動。如果本地hosts,沒有設定對映關係,那麼它會到區域網的DNS伺服器尋找對應的對映關係。如果仍然沒有,它就會在本地對應節點的DNS去查詢,重複上面所說的步驟。

nginx反向代理

代理:其實就是中介,A和B本來可以直連,但是在A和B之間加入了C。 正向代理

即上面的dns,它代理的是使用者端,為使用者端收發請求,對server斷是透明的。用瀏覽器存取 http://www.google.com 時,被殘忍的block,於是你可以在國外搭建一臺代理伺服器,讓代理幫我去請求google.com,代理把請求返回的相應結構再返回給我。

反向代理

即nginx的一個功能,它代理的是伺服器,它為server端轉發請求,對client端是透明的。當我們請求 www.baidu.com 的時候,就像撥打10086一樣,背後可能有成千上萬臺伺服器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理伺服器是誰就好了,www.baidu.com 就是我們的反向代理伺服器,反向代理伺服器會幫我們把請求轉發到真實的伺服器那裡去。Nginx就是效能非常好的反向代理伺服器,用來做負載均衡。

nginx加hosts做多域名對映

比如你的兩個應用的域名是a.test.com和b.test.com。

找到C:WindowsSystem32driversetc目錄下的hosts檔案,用超級管理員許可權開啟。在檔案尾部加入

a.test.com 127.0.0.1
b.test.com 127.0.0.1

修改nginx.conf檔案(由於nginx.conf的設定很多,這裡只是用最簡單的事例說明)在http的{}內部加入server。加入內容如下:

server {
  listen 80;
  server_name a.test.com;   //填入自己專案對應的域名
  charset utf-8;
  error_log logs/error.log;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:8888; //填入自己專案的ip加埠號(此處的專案沒有工程上下文,只有埠號)
  }
}

server {
  listen 80;
  server_name b.test.com;   //填入自己專案對應的域名
  charset utf-8;
  error_log logs/error.log;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:8889; //填入自己專案的ip加埠號(此處的專案沒有工程上下文,只有埠號)
  }
}

修改完以後,再重新載入nginx組態檔

nginx.exe -s reload

到此這篇關於nginx多域名轉發的實現的文章就介紹到這了,更多相關nginx多域名轉發內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com