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多網域轉送如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!