Nginx 學習 —— 正向代理與反向代理

2021-02-23 芋道源碼

點擊上方「芋道源碼」,選擇「置頂公眾號」

技術文章第一時間送達!

來源:http://t.cn/Evbdqc9

今天花點時間記錄下nginx的反向代理知識,之前也是有用過,但是我覺得還是依舊簡單地記錄下來,好記性不如爛筆頭,說不定你以後學了新知識,又把它忘記了,回過頭想重新學習,又得百度一下這找博客,那找博客,學習成本多大呀!

1、正向代理和反向代理的概念

無論是正向代理,還是反向代理,說到底,就是代理模式的衍生版本罷了。我們都學習過代理設計模式,都知道代理模式中有代理角色和被代理角色,為什麼這麼說,因為這兩個角色對於我們理解正向和反向代理非常重要,下面會講到。

下面我將引入這樣一個場景,很多時候我們上網的網速特別慢,或者說由於翻牆問題導致我們無法訪問到國外的網站,通常這些情況我們會通過給瀏覽器配置一個網速快的、可以翻牆的代理ip及埠號來解決我們的問題,那麼配置好之後,大概的請求流程如下圖所示:



我們首先請求代理伺服器,然後代理伺服器幫我們去快速訪問國外的網站,對於這種代理方式,我們就稱之為正向代理。請記住,上面說到代理模式的兩個角色中,我們當前的角色為 被代理者,也就是瀏覽器這個角色。更重要的是,正向代理的本質是我們去請求外部的資源,如果以生產者、消費者模式來區分,我們屬於消費者。

總結:

反向代理,很顯然,就是和正向代理相反,如果說正向代理是男,那麼反向代理就是女了,親,此處不再糾結其他情況!下面我用一副圖片解釋下反向代理:



看完上面的圖片,請你想像一下這麼一個場景,假設你現在是某公司技術總監,你們公司需要對外提供一套web服務,那麼你打算怎麼做呢?

答案是可以通過反向代理來完成。通常你們公司擁有自己的IDC機房,機房通訊通常採用區域網交換機,internet網用戶請求是無法直接訪問到區域網內的web服務的,因此這個時候,你需要一臺反向代理伺服器來接收internet web請求,然後將請求分發到區域網中的不同主機上進行處理,處理完成之後再做出響應。因此,反向代理大概就是這麼一個場景。請記住,反向代理中,我們的角色是 區域網 web服務

總結:

1、反向代理,我們的角色是 區域網 web服務

2、反向代理,我們對外提供服務,屬於服務提供者

2、nginx正向代理和反向代理實例解析

nginx在正向代理方面的應用非常地少,因此,對於正向代理的相關配置指令也不多,下面是一個nginx作為正向代理伺服器的配置實例,配置僅供參考。

server {  
   resolver 192.168.1.1; #指定DNS伺服器IP位址  
   listen 8080;  
   location / {  
       proxy_pass http://$http_host$request_uri; #設定代理伺服器的協議和地址  
   }  

解釋下上面的指令,resolver配置DNS伺服器的ip地址,可以配置多個。你可能會問,正向代理中為什麼需要配置DNS伺服器的ip地址呢?其實答案很簡單,你想像下假如現在你的瀏覽器配置了正向代理伺服器,你現在在瀏覽器中輸入http://oneSite.cn/index.html,根據正向代理原理,該url請求將會被正向代理伺服器執行,問題來了,如果你的代理伺服器不配置DNS解析服務,nginx怎麼知道你這個oneSite.cn到底是個什麼鬼,到底對應網際網路的ip地址是什麼?所以這就是需要配置resolver指令的原因所在。

listen指令配置nginx監聽瀏覽器請求的埠號。

proxy_pass指令配置接收到被代理瀏覽器發來的請求之後,需要幫忙執行的請求是什麼,$http_host$request_uri指明目的主機和uri,屬於nginx變量,一般不需要修改。

nginx反向代理的相關配置如下,在這裡小編搭建兩個Spring boot小demo模擬上面反向代理的web服務,相關原始碼可以在github獲取。



demo工程啟動埠號為8081,demo1工程啟動埠為8082,對於所有的請求前綴帶/demo的都將轉發到demo工程進行處理,對於所有的請求前綴帶/demo1的都將轉發到demo1工程進行處理。

nginx配置如下:

server {
   listen       80;
   location /demo {
       proxy_pass http://127.0.0.1:8081;
   }
   location /demo1 {
       proxy_pass http://127.0.0.1:8082;
   }
}

啟動demo和demo1兩個工程之後,瀏覽器輸入下面地址:





可以看到,外部統一使用80埠訪問服務時,nginx根據路徑前綴進行代理,然後返回執行結果。對於nginx反向代理路徑配置有幾點需要注意,使用時要非常謹慎。

上面proxy_pass指令配置的url為http://127.0.0.1:8081,注意在該url後面不能使用/demo1後綴進行代替,否則就報錯了。為什麼呢?首先nginx會判斷proxy_pass指令中配置的url地址是否包含uri,如果在proxy_pass指令中配置的url地址不包含uri,那麼nginx將會使用請求路徑的uri進行轉發,如果在proxy_pass指令中配置的url地址包含uri,則nginx會忽略請求location中的uri,轉而使用你在proxy_pass中配置的uri進行覆蓋,轉發,另外,/也是一種uri,哈哈,要特別小心哈~

舉例子:

假設請求地址為:http://localhost/demo/getServerInfo.json,location配置為/demo,proxy_pass配置為http://xxxx:port,則會使用http://xxxx:port/demo/getServerInfo.json進行轉發,結果正確。如果proxy_pass配置為http://xxxx:port/demo1,則會使用http://xxxx:port/demo1進行轉發,因為/demo1覆蓋了/demo


如果你對 Dubbo / Netty 等等源碼與原理感興趣,歡迎加入我的知識星球一起交流。長按下方二維碼噢


目前在知識星球更新了《Dubbo 源碼解析》目錄如下:

01. 調試環境搭建
02. 項目結構一覽
03. 配置 Configuration
04. 核心流程一覽

05. 拓展機制 SPI

06. 線程池

07. 服務暴露 Export

08. 服務引用 Refer

09. 註冊中心 Registry

10. 動態編譯 Compile

11. 動態代理 Proxy

12. 服務調用 Invoke

13. 調用特性 

14. 過濾器 Filter

15. NIO 伺服器

16. P2P 伺服器

17. HTTP 伺服器

18. 序列化 Serialization

19. 集群容錯 Cluster

20. 優雅停機

21. 日誌適配

22. 狀態檢查

23. 監控中心 Monitor

24. 管理中心 Admin

25. 運維命令 QOS

26. 鏈路追蹤 Tracing

... 一共 69+ 篇

目前在知識星球更新了《Netty 源碼解析》目錄如下:

01. 調試環境搭建
02. NIO 基礎
03. Netty 簡介
04. 啟動 Bootstrap

05. 事件輪詢 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 字節緩衝區 ByteBuf

09. 通道處理器 ChannelHandler

10. 編解碼 Codec

11. 工具類 Util

... 一共 61+ 篇

目前在知識星球更新了《資料庫實體設計》目錄如下:

01. 商品模塊
02. 交易模塊
03. 營銷模塊
04. 公用模塊

... 一共 17+ 篇

源碼不易↓↓↓

點讚支持老艿艿↓↓

相關焦點

  • Nginx 正向代理與反向代理
    /p/6056540.html1、前言最近工作中用到反向代理,發現網絡代理的玩法還真不少,網絡背後有很多需要去學習。而在此之前僅僅使用了過代理軟體,曾經為了訪問google,使用了代理軟體,需要在瀏覽器中配置代理的地址。我只知道有代理這個概念,並不清楚代理還有正向和反向之分,於是趕緊學習一下,補充一下知識。首先弄清楚什麼是正向代理,什麼是反向代理,然後是二者在實際使用中展示的方式是什麼樣的,最後總結一下正向代理用來做什麼,反向代理可以做什麼。
  • 代理技術 | 重磅,代理伺服器背後的故事(正向、反向代理)
    傳說中的代理服務技術是一門很古老的技術,網際網路早期就已經出現,一般來說,實現實現代理技術的實現就是在伺服器上安裝代理軟體,成為代理伺服器,從而配置\實現代理技術。    其實網絡代理的玩法真的很多。之前知道如何使用,今天我們看看代理背後的故事。    我們以nginx為例,常用的代理技術有:正向代理、反向代理和透明代理。
  • CentOS 配置 Nginx 反向代理
    導讀Nginx作為反向代理伺服器被廣泛使用在各大網際網路企業。它簡單易用,可以根據業務的需求將其不同的業務類型代理至不同的伺服器,將整個站點請求壓力按類型分攤到不同的伺服器。該方式使的整個站點請求性能得以極大的提升。本文簡要描述了Nginx幾種不同情形的代理演示,供大家參考。
  • 深入淺出反向代理 Web 伺服器Nginx
    反向代理伺服器?經常聽人說到一些術語,如反向代理,那麼什麼是反向代理,什麼又是正向代理呢?正向代理:正向代理示意圖反向代理:反向代理示意圖由於防火牆的原因,我們並不能直接訪問谷歌,那麼我們可以藉助VPN來實現,這就是一個簡單的正向代理的例子。
  • Nginx的 反向代理 究竟怎麼理解?
    1.1反向代理正向代理正向代理:區域網中的電腦用戶想要直接訪問網絡是不可行的,只能通過代理伺服器來訪問,這種代理服務就被稱為正向代理。反向代理反向代理:客戶端無法感知代理,因為客戶端訪問網絡不需要配置,只要把請求發送到反向代理伺服器
  • Nginx配置反向代理,一篇搞定!
    一、引言其他話不多說,下面來學習一下 Nginx 的反向代理。需要有 Linux 和 Nginx 環境。二、何為反向代理?在介紹反向代理之前,先來了解一下正向代理。正向代理: 如果把區域網外的 Internet 想像成一個巨大的資源庫,則區域網中的客戶端要訪問 Internet,則需要通過代理伺服器來訪問,這種代理服務就稱為正向代理。下面是正向代理的原理圖。
  • Nginx反向代理伺服器
    Nginx (engine x) 是一個高性能的HTTP和反向代理web伺服器,其特點:1.穩定性極強2.Nginx提供了非常豐富的配置實例
  • 13.nginx高級配置--反向代理
    一、什麼是代理    Nginx 伺服器的反向代理服務是其最常用的重要功能,由反向代理服務也可以衍生出很多與此相關的 Nginx 伺服器重要功能,比如負載均衡。本篇文章我們主要介紹 Nginx 的反向代理,當然在了解反向代理之前,我們需要先知道什麼是代理以及什麼是正向代理。  1.1 什麼是代理?
  • Nginx實現反向代理
    反向代理:在收到客戶端請求之後,會修目標IP位址和埠正向代理:在收到客戶端請求之後,會修源IP位址和埠上遊伺服器:代理伺服器後端的哪些真正給客戶端提供服務的節點
  • 正向代理、反向代理、Nginx負載均衡方式
    於是我先連上代理伺服器,告訴他我需要那個無法訪問網站的內容,代理伺服器去取回來,然後返回給我。從網站的角度,只在代理伺服器來取內容的時候有一次記錄,有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站。
  • Nginx 反向代理簡單使用
    安裝nginx第一步 下載 nginx第三步 配置nginx信息cd nginx-1.19.0./configure --prefix=/usr/local/nginx/sbin/nginx -?./sbin/nginx./sbin/nginx -c /tmp/nginx.conf./sbin/nginx -p /usr/local/nginx/./sbin/nginx -s stop./sbin/nginx -s quit./sbin/nginx -s reload./sbin/nginx -s reopen.
  • 深入淺出反向代理伺服器「Nginx」
    Nginx ("engine x") 是一個高性能的HTTP和反向代理伺服器,特點是佔有內存少,並發能力強,事實上nginx的 並發能力確實在同類型的網頁伺服器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。
  • Nginx反向代理實踐
    概述Nginx反向代理(Reverse Proxy):反向代理是指伺服器根據客戶端的請求
  • 淺談反向代理技術
    本篇側重點為反向代理技術,從攻擊者視角洞察安全運維習慣,當然,在此之前,我們得先來再完整熟悉下代理技術。目前大家提到的代理技術無外乎三種:正向代理、透明代理和反向代理,以下我們以B/S架構為例簡單介紹其中的區別。客戶端將請求轉發給代理伺服器,代理伺服器再負責轉發給目標網站,響應時服務端先響應給代理伺服器,代理伺服器再轉發給對應的客戶端。
  • 終於有人把正向代理和反向代理解釋的明明白白了!
    通過正向代理伺服器訪問目標伺服器,目標伺服器是不知道真正的客戶端是誰的,甚至不知道訪問自己的是一個代理(有時候中介也直接冒充租客)。>正向代理和反向代理的區別雖然正向代理伺服器和反向代理伺服器所處的位置都是客戶端和真實伺服器之間,所做的事情也都是把客戶端的請求轉發給伺服器,再把伺服器的響應轉發給客戶端
  • Nginx 反向代理與負載均衡
    什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問,必須通過第三方伺服器才能訪問集群這個時候,我們通過第三方伺服器訪問伺服器集群的內容,但是我們並不知道是哪一臺伺服器提供的內容,此種代理方式稱為反向代理什麼是負載均衡公司會建立很多的伺服器
  • Nginx反向代理伺服器的配置(詳細)
    Nginx使用起來比較簡單,經過簡單的配置文件的修改,就可以將主機配置成一臺web伺服器、一臺反向代理伺服器或者是一臺郵件代理伺服器。在配置Nginx反向代理伺服器之前,還是先來說說什麼是反向代理伺服器吧。
  • Nginx 反向代理、負載均衡圖文教程 !
    雖然看起來是一個玩笑的issue,但卻道出了前端們不得不表現出來的疲態,知識點越來越龐大,學習的內容越來越多也聽到一些朋友們說,換成現在再面試阿里,恐怕不好進了啊。當然很多都是隨便一說的玩笑話,聽過一笑便可,不必當真,也不必抱怨了好了,今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,內容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡什麼是反向代理與負載均衡什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問
  • 配置Nginx反向代理WebSocket
    題圖:By Anubhav Saxena From Unsplash用Nginx給網站做反向代理和負載均衡是廣泛使用的一種
  • 圖文講解,如何使用 Nginx 反向代理、負載均衡
    來源:http://t.cn/AiKual8Y學到老活到老什麼是反向代理與負載均衡Nginx反向代理與負載均衡的實現nginx配置proxy_passUpstream模塊實現負載均衡工作中的簡單使用學到老活到老前端圈一直很新