1. 程式人生 > >淺談nginx反向代理問題

淺談nginx反向代理問題

對正向代理和反向代理的概念理解:正向代理,我是這樣認為的,正向代理就好比我們想上網,然後要通過這個代理伺服器我們才能訪問特定的網路,正向代理的伺服器是和我們的區域網即客戶端在一起的;反向代理,我們要訪問伺服器,然後代理伺服器將我們的請求發給在他結點下面的伺服器,然後代理伺服器將收集到的資訊發給我們,所以我們感覺代理伺服器就是自己的伺服器一樣,其中反向代理伺服器是和對端伺服器部署在一起的。

最近在研究nginx如何做反向代理並且負載均衡的問題,其中小白我很糾結於nginx配置檔案上面的root目錄到底怎麼配置,因為我想模擬的是nginx單獨裝在一臺伺服器,然後通過nginx代理下面的伺服器結點,所以覺得這種情況Nginx不用配置本地目錄root,後來做實驗發覺我的猜想是對的,下面說說我進行的實驗:

首先說明我的實驗環境Centos6.5虛擬機器,地址是192.168.10.132,然後我的局域網裡面有兩個外網的伺服器都是210開頭的,如下圖,你的兩臺210伺服器必須都搭建了相同的網站,並且與上面的192.168.10.132能互相訪問,這裡在192.168.10.132和210伺服器之間是隔著防火牆裝置的,在拓撲圖中忽略了中間裝置

                                      

1安裝nginx,這個網上很多教程,這裡就不說了,我是主要參考菜鳥教程裡面的linux nginx安裝以及配置,大家如果想安裝和配置的話可以去上面看看教程。

2修改nginx.conf檔案(重點),開啟Nginx安裝目錄下的nginx.conf檔案,因為我的nginx安裝在/usr/local/nginx下面的,所以就用命令vi /usr/local/nginx/conf/nginx.conf開啟

               

我按照上圖修改了上面配置檔案的內容,畫紅色的是我修改的內容,我在http{}裡面加了一個upstream負載均衡器myserver,設定了weight權值,weight越大被訪問到的機率越高,同時也起到了反向代理這兩臺210的伺服器的作用,在server下面將nginx預設的本地目錄root註釋掉,加了一個Location模組,起到了負載排程的作用,proxy_pass是負載均衡組,要和上面的upstream名字相同都為myserver,下面的proxy_next_upstream定義了故障轉移策略,如果發生502,503等錯誤,會將請求轉發到另外一臺伺服器,include包含進proxy.conf,這個檔案是安裝nginx預設存在的,與nginx.conf在同一目錄下

注意:如果是nginx不是用於負載均衡,只是用作分發的作用的話,上述就不需要新增upstream模組,只需要新增不同虛擬主機的server模組,然後在裡面新增不同的server_name 和proxy_pass(這裡proxy_pass是對應主機的URL入口,如http://127.0.0.1:8080或者http://127.0.0.1:8888),也可以把不同虛擬主機寫成不同的配置檔案(如www_baidu_com.conf和www_google_com.conf),然後在配置檔案裡面新增server模組並放到一個資料夾下,接著在nginx_conf中把上面配置檔案include進去

3/usr/local/nginx/sbin/nginx -s reload重新載入配置檔案

我在測試的時候遇到了一些問題,有些網站的圖片和格式都無法正常顯示,所以在nginx.conf檔案裡面的幾個location模組加上了如下配置

                     

分別在css模組和gif圖片模組中加入了proxy_pass http://myserver;再/usr/local/nginx/bin/nginx -s reload重新載入一下配置檔案就可以正常訪問了

還有一點,我用的ie瀏覽器測試,要清理一下ie瀏覽器的快取,不然的話你會發覺怎麼修改weight的值也是在訪問同一臺伺服器。