Nginx 反向代理基本配置

上一篇關於Nginx的文章介紹了Nginx做爲Web服務器的特色以及在Windows系統下搭建Nginx+PHP環境的相關配置。Nginx做爲服務器的優勢是配置簡單,響應快,因此很多大型網站會使用Nginx做爲前排服務器,將請求轉發到後排的Apache、Squid之類的服務器,這時就須要用到"反向代理"這一特色。本文以一個簡單的轉發需求爲例,講解搭建反向代理的基本操做。儘管這個例子很簡單,但只要理解了工做和配置原理,就能應對更復雜的需求。php

 

目的:兩個經過路由器鏈接在同一局域網的系統(本例中爲虛擬機)分別安裝Nginx、Apache做服務器軟件,在安裝Nginx的系統上搭建反向代理。html

環境:VMWare Workstation 9.0,Win7系統(安裝Nginx),WinXP系統(安裝Apache)nginx

反向代理概念[1]瀏覽器

先理解正向代理。假設用戶A須要訪問網站C(這個網站正常工做),但經過瀏覽器發現訪問不到(多是國外網站,被牆了)。又知有一代理服務器B,A能夠訪問B,B能夠訪問C,因此A能夠經過B做代理訪問C了。這時B做中轉站,由A發給C的流量最終從A發向B,B負責轉發到C,由C發給A的流量也同樣道理,事實上A經過跳板B而訪問C;緩存

再看反向代理。假設用戶A訪問服務器B,要從B網站獲取X文件。然而服務器B上沒有X文件。這時B充當反向代理,根據配置條件在另外一個指定的服務器C(能夠在同一局域網,也能夠不在)上把X文件取回來,而後返回給A。B做爲一個接口服務器,把背後C服務器(不止一個,有可能上百個Server)隱藏起來。用戶A須要訪問這一羣服務器時,統一由B接收請求,根據B的配置從不一樣的服務器讀取須要的數據。從用戶的角度看,A並不知道實際訪問了哪一個服務器,只知道一個服務器B。反向代理一般是基於安全須要,有利於統一化網站。安全

步驟詳解:服務器

 

1. 安裝服務器軟件網絡

在虛擬機上安裝好Win七、WinXP系統。在Win7上安裝Nginx[2],在XP上安裝Apache(爲了方便,本例使用APMServ軟件[3])。開啓相關服務後(端口均爲80),在兩個系統的瀏覽器中訪問127.0.0.1(APMServ中能夠將默認網站目錄的phpinfo.php改名爲index.php),可以正常訪問便可。負載均衡

 

2. 配置固定IP學習

反向代理有根據域名和根據路徑兩個狀況。爲了方便,如今先把兩個系統的IP固定下來,並綁定兩個域名(不須要通過外網DNS,修改hosts文件就能夠)。因爲兩個虛擬機採用橋接的方式鏈接路由器,因此在路由器的設置後臺頁面中(192.168.1.1),綁定兩個虛擬系統的IP地址(開啓DHCP則在固定IP分配中用MAC綁定IP,關閉則在兩個虛擬系統中使用靜態IP方式鏈接)。本例中Win7的IP爲192.168.1.161,WinXP的IP爲192.168.1.160,從DHCP的客戶端列表能看到(KavMors客戶爲主機)。使用DHCP時若是虛擬機沒法鏈接到路由器,嘗試先點擊【虛擬機->可移動設備->網絡適配器->斷開鏈接】斷開虛擬機的網卡,再從新鏈接上。

在實際系統中,經過瀏覽器訪問192.168.1.160和192.168.1.161,能夠看到APMServ和Nginx的主頁

 

3. 綁定域名

這一步須要把域名和IP綁定起來。域名不須要申請,修改一下hosts文件就能夠了。打開hosts文件:C:\Windows\System32\drivers\etc,用記事本打開hosts文件,再結尾的地方把自定義的域名和192.168.1.161對應輸入:

注意兩個域名都要綁定192.168.1.161這個IP。由於本例須要用Nginx做反向代理,不管是vm-xp.com仍是xm-win7.com,都要通過Nginx(1.161)。保存修改後,在瀏覽器訪問這兩個域名,均可以訪問到Win7中的Nginx。

 

4. 基於域名的反向代理配置

如今做如下假設:虛擬機Win7和WinXp在同一局域網中,但與主機不在同一局域網中(其實是在的),主機不能訪問192.168.1.160但能夠經過域名訪問192.168.1.161。這時有如下需求:經過www.vm-win7.com能夠訪問Win7的網站目錄,經過www.vm-xp.com能夠訪問WinXP的網站目錄。但因爲兩個域名都指向Win7的IP,因此要在Win7的Nginx上建反向代理。

在Win7中,從Nginx的目錄打開conf/nginx.conf編輯:

4.1  把#37行改成 server_name localhost www.vm-win7.com,表示當域名爲localhost或www.vm-wim7.com時,使用這個server區域的配置;

4.2  在第一個server區域結束後(#80行),加入新的server配置,以下圖:

server_name表示當域名爲www.vm-xp.com時使用這個server的配置,proxy_pass是反向代理的配置語句,表示請求映射到192.168.1.160:80。保存後打開cmd,cd命令進入nginx的目錄後,輸入nginx -s reload,重啓nginx。

在瀏覽器中分別訪問兩個域名,能夠發現兩個域名已經定向到Win7和WinXP的主頁了。Nginx反向代理把win7.com的的流量交給本身處理,把winxp.com的流量交給192.168.1.160(VM-XP)的80端口處理。雖然兩個域名指向同一IP,但能夠訪問不一樣的主機。

 

5. 基於路徑的反向代理配置

在第4點中,根據不一樣域名可從同一IP訪問不一樣的主機。如今做如下假設:只有一個域名www.vm-win7.com,這個域名綁定到192.168.1.161,192.168.1.160不可被實際主機直接訪問。需配置一反向代理,當訪問www.vm-win7.com/xp/時,訪問vm-xp的網站目錄,其他路徑訪問vm-win7的目錄。

在Win7中,從Nginx的目錄打開conf/nginx.conf編輯:

5.1 在#42行中,插入如下紅色框內的內容:

表示訪問/xp時映射到192.168.1.160(vm-xp)上,下面三個proxy_set_header參數表示傳遞頭信息參數。保存後打開cmd,cd命令進入nginx的目錄後,輸入nginx -s reload,重啓nginx。

當訪問www.vm-win7.com時,能夠訪問到vm-win7的Nginx目錄;訪問www.vm-win7.com/xp/時,能夠訪問到vm-xp的Apache目錄。

 

6. 總結

本文講述了Nginx配置反向代理的基本設置。反向代理可基於域名或基於路徑轉發,本質上沒太大區別,但有條件的話,建議使用基於域名的轉發。基於路徑會出現網站根目錄和域名根目錄不對應的狀況,如上述例子中,在訪問www.vm-win7.com/xp/時,會發現phpinfo頁面的圖標不能顯示(以下圖)。

經過審查元素可發現圖片被定義到www.vm-win7.com/index.php中,但實際上URL應該是www.vm-win7.com/xp/index.php(改成【src="./index?「】則正常)。而使用基於域名的轉發則不存在這種狀況。

實際上反向代理的配置還有不少可選參數,也能夠與負載均衡聯繫一塊兒使用。有興趣能夠自行搜索學習,本文就不詳細講述了。

 

參考資料及引用:

[1] 反向代理概念: Nginx 反向代理、負載均衡、頁面緩存、URL重寫及讀寫分離詳解.
http://www.360doc.com/content/13/1114/12/7694408_329125489.shtml

[2] Windows下安裝及配置Nginx: Http服務器基本配置[Windows + Nginx + MySQL + phpMyAdmin].
http://www.cnblogs.com/kavmors/p/4295585.html

[3] APMServ官方網站: 張宴的博客. 《APMServ 5.2.6》:一鍵快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平臺的綠色軟件.
http://zyan.cc/apmserv/

相關文章
相關標籤/搜索