在做JAVA WEB開發的過程中,經常要使用到Nginx來完成一個稱爲反向代理的工作,一直也沒去細究反向代理是什麼,更沒有去了解正向代理是什麼,經過簡短的學習來記錄一下自己對兩者的理解。
一、正向代理
根據網上的資料,我個人的理解爲,正向代理最大的用處就是一個所謂的跳板。
一個最簡單的例子就是“翻牆”。當我們想要去瀏覽類似google這種網站的時候。我們再普通的直連網內是無法訪問到的。
但是如果這時,有一個國內的服務器正好可以訪問到google。而且我們又可以去訪問到這個服務器,那麼我們就可以將這個服務器作爲跳板,向這個服務器去請求獲取google的數據。這就實現了一個正向代理。
由於我們自己要去決定是不是要通過代理服務器來訪問google。所以必要的配置是必不可少的。這也就限制了我們必須自己配置好代理服務器的一些信息,去訪問他。
以下是根據我自身理解去畫出的一個簡略的圖。
在此圖中,用戶機可以比喻爲我們自身,正向代理服務器就是那個可以訪問到google的那個服務器了。那麼當然內容服務器就是google了。
對於正向代理來說,如果不做特殊配置,那麼內容服務器並不知道是不是代理服務器去訪問的他。也就是說正向代理服務器對於內容服務器來說,是完全透明的。對於google來說,可能只是在同一時間內許多相同的IP在訪問他而已。
所以我們可以大概的說,正向代理服務器與用戶機是爲一體的。
二、反向代理
反向代理,也就是我們所熟悉的Nginx所實現的功能。
以下是反向代理的簡略圖。
相對於正向代理來說。反向代理是對用戶來說完全透明的。
當我們在服務器上使用Nginx的時候,用戶只是去訪問我們所告訴他們的一個端口,他們並不清楚我們內部對他們的請求做了哪些轉發。
用戶省去了他們的配置的過程。但是取而代之的則是我們需要對反向代理服務器(Nginx)進行配置。
在我的理解內,反向代理服務器的作用主要是對請求的分發。
對分發進行簡單的處理,也就可以實現類似負載均衡,安全配置等功能。
在使用反向代理的時候,我們的內容服務器有可能不是單獨的一個實例,而是實例的集羣。
我們通過反向代理的配置,來讓這些請求平均的發送到每一個實例上來實現負載均衡。
另外我們也可以讓請求首先指向一個安全服務器來進行安全的配置。
總結起來,我認爲反向代理服務器是與內容服務器融爲一體的。因爲他對用戶機完全透明。