nginx反向代理流程

一、nginx反向代理流程

反向代理:使用代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡中的上游服務器,并將上游服務器得到的結果返回給請求連接的客戶端,代理服務器對外表現就是一個web服務器。Nginx就經常拿來做HTTP反向代理服務器。

Nginx具有強悍的高并發高負載能力,所以一般會作為前端服務器直接向客戶端提供靜態文件服務。但是一些復雜、多變的業務不適合放Nginx上,一般會使用Apache、Tomcat等服務器來處理。因此,Nginx一般會作為靜態web服務器與反向代理服務器,將不適合自己處理的請求轉發給上游服務器處理。

在這里插入圖片描述

https://img-blog.csdnimg.cn/c9d704be6d2e4f97b1e95cc76c628ac9.png

Nginx代理服務器處理過程:

1.接受HTTP請求,將用戶的請求(包括HTTP包體)完整的接受到Nginx服務器的磁盤或者內存中。

2.向上游服務器發起連接

3.將緩存的客戶端請求轉發到上游服務器

Nginx的這種轉發方式與Squid等代理服務器的處理方式不同,Squid是一邊接收客戶端請求,一邊將請求轉發到上游服務器。相比之下 ,Nginx延長了一個請求處理的時間,并且增加了用于緩存請求內容的內存和磁盤空間。 但是Nginx有效的降低了上游服務器的負載,將壓力放在了Nginx服務器上。

那么Nginx的這種機制是如何降低上游服務器的負載的呢?通常情況下,客戶端與Nginx代理服務器走公網,代理服務器與上游服務器之間走內網。如果一邊接受客戶端請求,一般將請求轉發到上游服務器的話,上游服務器需要長時間的保存這個連接,增加上游服務器的并發壓力。但是如果是接受到完整請求之后,再轉發給上游服務器的話,內網的速度更快,不需要那么長的時間保持連接,可以減低上游服務器的并發壓力。

二、nginx反向代理具體執行過程

以訪問:http://nginx.test.com為例:

1、當HTTP請求交給Nginx處理時,首先Nginx會取出header頭中的Host (此處也就是 nginx.test.com),然后將其與所有的配置文件中的每個server段中的server_name進行匹配,以此決定到底有哪個server塊來處理這個請求。(當然有時也可能一個Host與多個server塊中的server_name都匹配,這時會根據匹配的優先級選擇實際處理的server塊)

2、此時我們可以看到HTTP請求匹配到了server_name nginx.test.com;,這樣接下來nginx就會在當前server塊中匹配到 location / 。

3、接下來繼續由nginx處理可以看到 location / { proxy_pass http://hellonginx; } ; 這就是進行反向代理處理,這個例子中使用的是nginx的upstream模塊進行反向代理實現。

4、通過proxy_pass http://hellonginx; 中的 hellonginx 可以找到對應的upstream塊,然后,可以根據其中的 server 127.0.0.1:8080 ;再次進行代理請求到目標服務器。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【內網穿透】如何實現在外web瀏覽器遠程訪問jupyter notebook服務器

文章目錄 前言1. Python環境安裝2. Jupyter 安裝3. 啟動Jupyter Notebook4. 遠程訪問4.1 安裝配置cpolar內網穿透4.2 創建隧道映射本地端口 5. 固定公網地址 前言 Jupyter Notebook,它是一個交互式的數據科學和計算環境,支持多種編程語言,如…

信也科技一面涼經

1.在項目經歷里挑一個詳細介紹一下 項目的應用場景 2.項目里用到多線程是怎么用的?回答:線程池 用通過 ThreadPoolExecutor 構造函數的方式創建的線程池 3.線程池有哪些重要參數?回答:核心線程數、最大線程數、阻塞隊列類型、…

【愛書不愛輸的程序猿】公網訪問本地搭建的WEB服務器之詳細教程

歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本地電腦搭建Web服務器并用cpolar發布至公網訪問 前言1. 首先將PHPStudy、WordPress、cpolar下載到電腦2. 安裝PHPStudy3. 安裝cpolar,進入Web-UI界面4.安裝wordpress5.…

KU Leuven TU Berlin 推出“RobBERT”,一款荷蘭索塔 BERT

荷蘭語是大約24萬人的第一語言,也是近5萬人的第二語言,是繼英語和德語之后第三大日耳曼語言。來自比利時魯汶大學和柏林工業大學的一組研究人員最近推出了基于荷蘭RoBERTa的語言模型RobBERT。 谷歌的BERT(來自Transformers的B idirectional …

C語言 常用工具型API --------system()

函數名: system() 用 法: int system(char *command); 原理: 創建一個子進程去加載一個新程序執行,而Linux命令基本都是一個單獨的進程實現的,所以你所掌握的Linux命令越多,該函數…

AUTOSAR規范與ECU軟件開發(實踐篇)4.2 基于Matlab/Simulink的軟件組件開發

目錄 前言 1 、Matlab/Simulink與AUTOSAR基本概念的對應關系 2 、軟件組件內部行為建模方法

由淺入深學習Tapable

文章目錄 由淺入深學習TapableTapable是什么Tapable的Hook分類同步和異步的 使用Sync*同步類型鉤子基本使用bailLoopWaterfall Async*異步類型鉤子ParallelSeries 由淺入深學習Tapable webpack有兩個非常重要的類:Compiler和Compilation。他們通過注入插件的方式&a…

CentOS系統環境搭建(一)——Centos7更新

Centos7更新 更新 yum(包括centos內核) yum update執行后,系統將更新到centos 7.9。 從這一篇文章開始開始,我將開始在centos系統環境搭建🔗https://blog.csdn.net/weixin_43982359/category_12411496.html中開始對C…

【數據分析入門】Numpy進階

目錄 一、數據重塑1.1 透視1.2 透視表1.3 堆棧/反堆棧1.3 融合 二、迭代三、高級索引3.1 基礎選擇3.2 通過isin選擇3.3 通過Where選擇3.4 通過Query選擇3.5 設置/取消索引3.6 重置索引3.6.1 前向填充3.6.2 后向填充 3.7 多重索引 四、重復數據五、數據分組5.1 聚合5.2 轉換 六、…

回溯算法詳解

目錄 回溯算法詳解 回溯VS遞歸 回溯算法的實現過程 n個結點構造多本節要討論的是當給定 n(n>0)個結點時,可以構建多少種形態不同的樹。 回溯算法詳解 回溯算法,又稱為“試探法”。解決問題時,每進行一步&#…

主成分分析Python代碼

對于主成分分析詳細的介紹:主成分分析(PCA)原理詳解https://blog.csdn.net/zhongkelee/article/details/44064401 import numpy as np import pandas as pd標準PCA算法 def standeredPCA(data,N): #data:…

【golang】鏈表(List)

List實現了一個雙向鏈表,而Element則代表了鏈表中元素的結構。 可以把自己生成的Element類型值傳給鏈表嗎? 首先來看List的四種方法。 MoveBefore方法和MoveAfter方法,它們分別用于把給定的元素移動到另一個元素的前面和后面。 MoveToFro…

十種排序算法(附動圖)

排序算法 一、基本介紹 ? 排序算法比較基礎,但是設計到很多計算機科學的想法,如下: ? 1、比較和非比較的策略 ? 2、迭代和遞歸的實現 ? 3、分而治之思想 ? 4、最佳、最差、平均情況時間復雜度分析 ? 5、隨機算法 二、排序算法的分類 …

RabbitMq-1基礎概念

RabbitMq-----分布式中的一種通信手段 1. MQ的基本概念(message queue,消息隊列) mq:消息隊列,存儲消息的中間件 分布式系統通信的兩種方式:直接遠程調用,借助第三方完成間接通信 消息的發送方是生產者&#xff0c…

面試熱題(二叉樹的鋸齒形層次遍歷)

給你二叉樹的根節點 root ,返回其節點值的 鋸齒形層序遍歷 。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行) 輸入:root [3,9,20,null,null,15,7] 輸出:[[3…

MySQL數據庫-字符串函數詳解

前言 MySQL數據庫提供了多種不同類型的函數,用于處理字符串、日期、數值等數據類型,以及實現條件、聚合等操作,下面我們主要介紹字符串函數 CONCAT() 函數 CONCAT() 可用于將多個字符串連接在一起。 示例: SELECT CONCAT(Hell…

C++ STL stack queue

目錄 一.stack 介紹 二.stack 使用 三.stack 模擬實現 普通版本: 適配器版本: 四.queue的介紹 五. queue使用 六.queue模擬實現 七.deque介紹 1.容器適配器 2.deque的簡單介紹 3.deque的缺陷 4.為什么選擇deque作為stack和queue的底層默認容…

System.Text.Encoding不同字符編碼之間進行轉換

System.Text.Encoding 是 C# 中用于處理字符編碼和字符串與字節之間轉換的類。它提供了各種靜態方法和屬性,用于在不同字符編碼之間進行轉換,以及將字符串轉換為字節數組或反之。 在處理多語言文本、文件、網絡通信以及其他字符數據的場景中&#xff0c…

Spring Boot 獲取前端參數

Spring Boot 獲取前端參數 在開發 Web 應用程序時,前端參數是非常重要的。Spring Boot 提供了多種方法來獲取前端參數,本文將介紹其中的一些常用方法。 1. 使用 RequestParam 注解 RequestParam 注解是 Spring MVC 提供的一種常用方式,用于…

C++ 函數

函數是一組一起執行一個任務的語句。每個 C 程序都至少有一個函數,即主函數 main() ,所有簡單的程序都可以定義其他額外的函數。 您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常…