針對nginx,我們來具體聊聊正向代理與反向代理區別
先來說說什麼是代理伺服器?
所謂代理伺服器就是位於發起請求的客戶端與原始伺服器端之間的一臺跳板伺服器,正向代理可以隱藏客戶端,反向代理可以隱藏原始伺服器。
如果你對這句話還不是特別瞭解,那麼接下來我們就詳細聊聊正向代理和反向代理的區別。
正向代理
假如你常用的電腦想通過google搜尋一個關鍵詞“hello world”,但是國內現在不允許訪問google一下,所以你訪問不了。
但,假如你現在有一臺國外伺服器可以訪問google,於是出現了這種情況:
於是你想到,我的電腦直接遠端控制這臺伺服器就能google啦,雖然有點麻煩。時間久了你就可能覺得每次遠端時間挺累的事情,於是你又想,能不能我的電腦訪問這臺伺服器,然後這臺伺服器去幫我請求google,然後把請求到的資料返回給我。設想是這樣的:
這個過程其實就是正向代理!!
那麼問題來了,怎麼才能讓我的這臺伺服器接受在我搜索hello world的時候自動幫我去訪問google呢?你想到nginx好像有正向代理的功能,於是按照了nginx,並配置相關資訊:
其中:resolver配置DNS解析IP地址,比如 Google Public DNS。(圖例只是個例子,不是google dns)這時候,你在瀏覽器上配置上代理伺服器地址和81埠,瀏覽器就會自動把請求轉給代理伺服器實現傳說中的“翻牆”啦。
來看看小飛機的翻牆代理:
總結來了,想要實現正向代理,得配置一臺轉發請求的跳板伺服器,同時客戶端還得配置跳板伺服器的代理地址。google是不知道訪問的是我的電腦,只知道是我代理伺服器。所以,如果當黑客去黑別人的網站,同時不想讓網站追蹤到你的ip地址,你就可以操控一臺代理伺服器去代替你攻擊,這就是傳說中的“肉雞”啦!
反向代理
回顧一下上篇內容,以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。
所以:反向代理與正向代理是相對的。正向代理是替代客戶端去發起請求,而反向代理是替代伺服器接受客戶端的請求。
有如下圖例:
這時候這臺代理伺服器其實不掌握在我們使用者手裡了,而是google專門用來接受請求,同時還可以作為過濾不正常的請求,防止你們黑的的一個伺服器。對我們客戶端來說,不掌握在我手裡的東西都是別人的,所以這臺伺服器是反向的,哈哈。
google有了這臺代理伺服器,我們客戶端就接觸不到他的真正伺服器。google內部可以做微服務,代理伺服器可以根據url轉發到不同的內部伺服器。
nginx的配置上你可以通過指定不同的url字首跳轉到不同的伺服器哈~
一句話總結
好了,如果你還不理解。最後我就要放大招了,一句話:假如說正向代理是黑客手裡的攻擊長矛,反向代理就是google握著的一個盾牌,相互撕殺,誰也不知道是對方是誰!!
借用網友的一張神圖作為結尾:
來源於:
呂一明 java思維導圖