日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx反向代理原理简介

發(fā)布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx反向代理原理简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From:http://zcnick.blog.51cto.com/1992444/774662

?

1、反向代理的概念

??反向代理(Reverse?Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。

通常的代理服務器,只用于代理內部網絡對Internet外部網絡的連接請求,客戶機必須指定代理服務器,并將本來要直接發(fā)送到Web服務器上的http請求發(fā)送到代理服務器中。不支持外部網絡對內部網絡的連接請求,因為內部網絡對外部網絡是不可見的。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱為反向代理服務。此時代理服務器對外就表現為一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在于,這個服務器沒有保存任何網頁的真實數據,所有的靜態(tài)網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的***并不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。

反向代理就是通常所說的web服務器加速,它是一種通過在繁忙的web服務器和外部網絡之間增加一個高速的web緩沖服務器來降低實際的web服務器的負載的一種技術。反向代理是針對web服務器提高加速功能,作為代理緩存,它并不是針對瀏覽器用戶,而針對一臺或多臺特定的web服務器,它可以代理外部網絡對內部網絡的訪問請求。

方向代理服務器會強制將外部網絡對要代理的服務器的訪問經過它,這樣反向代理服務器負責接收客戶端的請求,然后到源服務器上獲取內容,把內容返回給用戶,并把內容保存到本地,以便日后再收到同樣的信息請求時,它會把本地緩存里的內容直接發(fā)給用戶,以減少后端web服務器的壓力,提高響應速度。

?

?

2、反向代理服務器與內容服務器

??代理服務器充當服務器的替身,如果您的內容服務器具有必須保持安全的敏感信息,如信用卡號數據庫,可在防火墻外部設置一個代理服務器作為內容服務器的替身。當外部客戶機嘗試訪問內容服務器時,會將其送到代理服務器。實際內容位于內容服務器上,在防火墻內部受到安全保護。代理服務器位于防火墻外部,在客戶機看來就像是內容服務器。

當客戶機向站點提出請求時,請求將轉到代理服務器。然后,代理服務器通過防火墻中的特定通路,將客戶機的請求發(fā)送到內容服務器。內容服務器再通過該通道將結果回傳給代理服務器。代理服務器將檢索到的信息發(fā)送給客戶機,好像代理服務器就是實際的內容服務器。如果內容服務器返回錯誤消息,代理服務器會先行截取該消息并更改標頭中列出的任何URL,然后再將消息發(fā)送給客戶機。如此可防止外部客戶機獲取內部內容服務器的重定向URL。

這樣,代理服務器就在安全數據庫和可能的惡意***之間提供了又一道屏障。與有權訪問整個數據庫的情況相對比,就算是僥幸***成功,作惡者充其量也僅限于訪問單個事務中所涉及的信息。未經授權的用戶無法訪問到真正的內容服務器,因為防火墻通路只允許代理服務器有權進行訪問。

?

?

3、反向代理服務器的工作流程

1)?用戶通過域名發(fā)出訪問web服務器的請求,該域名被DNS服務器解析為反向代理服務器的IP地址;

2)?反向代理服務器接受用戶的請求;

3)?反向代理服務器在本地緩存中查找請求的內容,找到后直接把內容發(fā)送給用戶;

4)?如果本地緩存里沒有用戶所請求的信息內容,反向代理服務器會代替用戶向源服務器請求同樣的信息內容,并把信息內容發(fā)給用戶,如果信息內容是緩存的還會把它保存到緩存中。

?

?

4、反向代理的好處

1)?解決了網站服務器對外可見的問題;

2)?節(jié)約了有限的IP地址資源,企業(yè)內所有的網站共享一個在internet中注冊的IP地址,這些服務器分配私有地址,采用虛擬主機的方式對外提供服務;

3)?保護了真實的web服務器,web服務器對外不可見,外網只能看到反向代理服務器,而反向代理服務器上并沒有真實數據,因此,保證了web服務器的資源安全;

4)?加速了對網站訪問速度,減輕web服務器的負擔,反向代理具有緩存網頁的功能,如果用戶需要的內容在緩存中,則可以直接從代理服務其中獲取,減輕了web服務器的負荷,同時也加快了用戶的訪問速度。

?

?

5、Nginx作為反向代理實現負載均衡的示例

我們介紹了nginx這個輕量級的高性能server主要可以干的兩件事情:

直接作為http?server(代替apache,對PHP需要FastCGI處理器支持,這個我們之后介紹);

另外一個功能就是作為反向代理服務器實現負載均衡(如下我們就來舉例說明實際中如何使用nginx實現負載均衡)。

因為nginx在處理并發(fā)方面的優(yōu)勢,現在這個應用非常常見。當然了Apache的mod_proxy和mod_cache結合使用也可以實現對多臺app?server的反向代理和負載均衡,但是在并發(fā)處理方面apache還是沒有nginx擅長。

?

1)環(huán)境:

a.?我們本地是Windows系統,然后使用VirutalBox安裝一個虛擬的Linux系統。在本地的Windows系統上分別安裝nginx(偵聽8080端口)和apache(偵聽80端口)。在虛擬的Linux系統上安裝apache(偵聽80端口)。這樣我們相當于擁有了1臺nginx在前端作為反向代理服務器;后面有2臺apache作為應用程序服務器(可以看作是小型的server?cluster。;-)?);

b.?nginx用來作為反向代理服務器,放置到兩臺apache之前,作為用戶訪問的入口;nginx僅

僅處理靜態(tài)頁面,動態(tài)的頁面(php請求)統統都交付給后臺的兩臺apache來處理。也就是說,可以把我們網站的靜態(tài)頁面或者文件放置到nginx的目錄下;動態(tài)的頁面和數據庫訪問都保留到后臺的apache服務器上。

c.?如下介紹兩種方法實現server?cluster的負載均衡。

我們假設前端nginx(為127.0.0.1:80)僅僅包含一個靜態(tài)頁面index.html;

后臺的兩個apache服務器(分別為localhost:80和158.37.70.143:80),一臺根目錄放置phpMyAdmin文件夾和test.php(里面測試代碼為print?"server1";),另一臺根目錄僅僅放置一個test.php(里面測試代碼為print?"server2";)。

?

2)針對不同請求的負載均衡:

a.?在最簡單地構建反向代理的時候(nginx僅僅處理靜態(tài)不處理動態(tài)內容,動態(tài)內容交給后臺的apache?server來處理),我們具體的設置為:

在nginx.conf中修改:

location?~?\.php$?{

?????proxy_pass?158.37.70.143:80?;

}

這樣當客戶端訪問localhost:8080/index.html的時候,前端的nginx會自動進行響應;??

當用戶訪問localhost:8080/test.php的時候(這個時候nginx目錄下根本就沒有該文件),但是通過上面的設置location?~?\.php$(表示正則表達式匹配以.php結尾的文件,詳情參看location是如何定義和匹配的http://wiki.nginx.org/NginxHttpCoreModule)?,nginx服務器會自動pass給158.37.70.143的apache服務器了。該服務器下的test.php就會被自動解析,然后將html的結果頁面返回給nginx,然后nginx進行顯示(如果nginx使用memcached模塊或者squid還可以支持緩存),輸出結果為打印server2。

如上是最為簡單的使用nginx做為反向代理服務器的例子;

b.?我們現在對如上例子進行擴展,使其支持如上的兩臺服務器。

我們設置nginx.conf的server模塊部分,將對應部分修改為:

location?~^?/nagios/?{

?????proxy_pass?127.0.0.1:80?;

}

location?~?\.php$?{

?????proxy_pass?158.37.70.143:80?;

}

上面第一個部分location?^~?/phpMyAdmin/,表示不使用正則表達式匹配(^~),而是直接匹配,也就是如果客戶端訪問的URL是以http://localhost:8080/phpMyAdmin/?開頭的話(本地的nginx目錄下根本沒有phpMyAdmin目錄),nginx會自動pass到127.0.0.1:80?的Apache服務器,該服務器對phpMyAdmin目錄下的頁面進行解析,然后將結果發(fā)送給nginx,后者顯示;

如果客戶端訪問URL是http://localhost/test.php?的話,則會被pass到158.37.70.143:80?的

apache進行處理。

因此綜上,我們實現了針對不同請求的負載均衡。

如果用戶訪問靜態(tài)頁面index.html,最前端的nginx直接進行響應;

如果用戶訪問test.php頁面的話,158.37.70.143:80?的Apache進行響應;

如果用戶訪問目錄phpMyAdmin下的頁面的話,127.0.0.1:80?的Apache進行響應;

?

3)訪問同一頁面的負載均衡:

即用戶訪問http://localhost:8080/test.php?這個同一頁面的時候,我們實現兩臺服務器的負載均衡(實際情況中,這兩個服務器上的數據要求同步一致,這里我們分別定義了打印server1和server2是為了進行辨認區(qū)別)。

a.?現在我們的情況是在windows下nginx是localhost偵聽8080端口;

兩臺apache,一臺是127.0.0.1:80(包含test.php頁面但是打印server1),另一臺是虛擬機的158.37.70.143:80(包含test.php頁面但是打印server2)。

b.?因此重新配置nginx.conf為:

首先在nginx的配置文件nginx.conf的http模塊中添加,服務器集群server?cluster(我們這里是兩臺)的定義:

upstream?myCluster?{

?????server?127.0.0.1:80?;

?????server?158.37.70.143:80?;

}

表示這個server?cluster包含2臺服務器>然后在server模塊中定義,負載均衡:

location?~?\.php$?{

???proxy_pass?http://myCluster?;?#這里的名字和上面的cluster的名字相同

???proxy_redirect?off;

???proxy_set_header?Host?$host;

???proxy_set_header?X-Real-IP?$remote_addr;

???proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;

}

這樣的話,如果訪問http://localhost:8080/test.php?頁面的話,nginx目錄下根本沒有該文件,但是它會自動將其pass到myCluster定義的服務區(qū)機群中,分別由127.0.0.1:80;或者158.37.70.143:80;來做處理。上面在定義upstream的時候每個server之后沒有定義權重,表示兩者均衡;如果希望某個更多響應的話例如:

upstream?myCluster?{

???server?127.0.0.1:80?weight=5;

???server?158.37.70.143:80?;

}

這樣表示5/6的幾率訪問第一個server,1/6訪問第二個。另外還可以定義max_fails和fail_timeout等參數。

綜上,我們使用nginx的反向代理服務器reverse?proxy?server的功能,將其布置到多臺apache?server的前端。

nginx僅僅用來處理靜態(tài)頁面響應和動態(tài)請求的代理pass,后臺的apache?server作為app?server來對前臺pass過來的動態(tài)頁面進行處理并返回給nginx。

?

?

通過以上的架構,我們可以實現nginx和多臺apache構成的機群cluster的負載均衡。兩種均衡:

1)可以在nginx中定義訪問不同的內容,代理到不同的后臺server;如上例子中的訪問phpMyAdmin目錄代理到第一臺server上;訪問test.php代理到第二臺server上;

2)可以在nginx中定義訪問同一頁面,均衡(當然如果服務器性能不同可以定義權重來均衡)地代理到不同的后臺server上。如上的例子訪問test.php頁面,會均衡地代理到server1或者server2上。

實際應用中,server1和server2上分別保留相同的app程序和數據,需要考慮兩者的數據同步。


轉載于:https://blog.51cto.com/wameide/1607264

總結

以上是生活随笔為你收集整理的nginx反向代理原理简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。