Linux服務:Nginx反向代理與負載均衡

一、Nginx反向代理

1、什么是反向代理?

代理分為兩類,正向代理和反向代理。

①正向代理:幫助用戶訪問服務器,緩存服務器內容。

②反向代理:代理服務器處理用戶的請求,決定轉發請求給誰處理負載均衡的作用。

2、實現反向代理實驗

nginx可以代理七層跟四層,代理七層代理比四層看到的東西功能強大,可以看到真實數據。

使用模塊:proxy_pass 反向代理的服務器地址或域名;

①實驗拓撲

②實驗目的:

由pc2代理服務器,代理服務端pc3處理用戶pc1的請求

③實驗過程

①首先準備三臺虛擬機且關閉防火墻和selinux,其中pc2和pc3安裝nginx。
pc2、pc3執行:
yum  install   epel-release -y 
yum  install   nginx  -y 
#安裝nginx
②pc2和pc3上創建子配置文件test.conf
pc2、pc3執行:
cd /etc/nginx/conf.d/
touch test.conf
#進入子配置文件目錄創建子配置文件
③服務端pc3子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
④創建服務端pc3虛擬主機的根目錄,并寫默認內容為this is pc3在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#遞歸創建文件夾并設置默認主頁內容
⑤反向代理服務器pc2的配置文件內容:
server {listen 80;
#監聽所有80端口server_name www.lhj.com;
#創建虛擬主機www.lhj.com
location /{
proxy_pass http://192.168.30.13
#訪問反代的虛擬主機www.lhj.com則由192.168.30.13處理請求
}    
}
⑥代理服務和服務端開啟nginx服務,并在pc1客戶端添加www.lhj.com的對應hosts文件進行測試
pc2、pc3執行:
systemctl start nginx 
pc1執行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts  
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com內容
curl  www.lhj.com
#訪問反向代理服務器
得到內容
this is  pc3

二、反向代理負載均衡

nginx反向代理負載均衡中用的是upstream模塊,應用于http模塊中,目的為所有server模塊提供服務,默認算法為輪詢。

使用格式

upstream name(反向代理名稱){

}

其他配置:①max_conns=數字;設置最大活動連接數,默認為0表示無限制

②max_fails=數字;后端服務器下載條件,對本次調度選擇的后端服務器進行連續檢查,如果都失敗標記不可用,默認1次。

③fail_timeout=time;后的服務器上行時間,壞掉后修復需要檢查多久才能上線使用,默認檢查10s。

④backup 設置為備份服務器,所有服務器不可用時使用此服務,注意不能指定自己;

⑤down 指定此服務器down狀態,無論本身是什么狀態;

1、反向代理負載均衡調度算法

①輪詢算法

默認算法是輪詢算法即反向代理服務器處理用戶請求時,每個后端服務器都輪流給。

upstream lhj{ server http://192.168.170.111;

? ? ? ? ? ? ? ? ? ? ? ?server http://192.168.170.114

}

②加權輪詢算法

在默認輪詢的基礎上增加權重,weight=number。如果后端有2個服務器其中一個配置權重為weight=3另外一個不配置默認是1,則有用戶訪問時分配給給有權重的服務器和不配置權重的服務器的比例為3:1。

upstream lhj{ server http://192.168.170.111? ? ? weight=3;

? ? ? ? ? ? ? ? ? ? ? server? http://192.168.170.114;

}

③最小連接算法

按照nginx反向代理服務器和后端服務器的連接數分配請求,連接越少的分配處理請求優先級越高。例如若最小連接數(least_conn;)是設置是3,后端服務器1有2個請求在處理,而后端服務器2只有一個請求在處理則新請求交給后端服務器2。

upstream lhj{ least_conn;

? ? ? ? ? ? ? ? ? ? ? server? ?htttp://192.168.170.111;

? ? ? ? ? ? ? ? ? ? ? server http://192.168.170.114;

}

④ip url哈希算法

每個請求按訪問ip或者url的hash結果分配,這樣每個訪客固定訪問一個后端服務器,不需要知道是如何計算的,只要了解會固定訪問一個后端服務器即可。

⑤響應時間fair算法

需要解讀nginx第三方模塊ngx_http_upstream_fair_module實現,配置時max_fails=number為后端服務器配置,默認單位為秒,按照響應時間來處理請求,響應時間越短越優先分配。

2、實現反向代理負載均衡實驗

使用變量:$remote_root

①實驗拓撲

②實驗目的

用戶pc1訪問代理服務的www.lhj.com虛擬主機域名時,若由服務端pc3服務器處理則返回this is pc3若由服務器pc4服務器處理則返回this is pc4用nginx反向代理實現負載均衡。

③實驗過程

①首先準備四臺虛擬機且關閉防火墻和selinux,其中pc2、pc3、pc4安裝nginx。
pc2、pc3、pc4執行:
yum  install   epel-release -y 
yum  install   nginx  -y 
#安裝nginx
②pc2、pc3、pc4上創建子配置文件test.conf
pc2、pc3、pc4執行:
cd /etc/nginx/conf.d/
touch test.conf
#進入子配置文件目錄創建子配置文件
③服務端pc3子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
④創建服務端pc3虛擬主機的根目錄,并寫默認內容為this is pc3在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#遞歸創建文件夾并設置默認主頁內容
⑤服務端pc4子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
⑥服務端pc4子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
⑦創建服務端pc4虛擬主機的根目錄,并寫默認內容為this is pc4在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc4">/etc/nginx/html/index.html
⑧反向代理服務器pc2的主配置文件和子配置文件修改:
主配置文件內容修改:
vim /etc/nginx/nginx.conf
#打開主配置文件,在主配置文件的http模塊中添加內容如下:
upstream  lhj {
#創建名字為lhj的方向代理負載均衡server 192.168.30.13;
#服務端pc3地址server 192.168.30.14;
#服務端pc4地址
}
#子配置文件test.conf內容:
server {listen 80;
#監聽所有80端口server_name www.lhj.com;
#創建虛擬主機www.lhj.com
location /{
proxy_pass http://lhj;
#訪問反代的虛擬主機www.lhj.com則由反向代理負載均衡lhj來處理請求
}    
}
⑨代理服務和服務端開啟nginx服務,并在pc1客戶端添加www.lhj.com的對應hosts文件進行測試
pc2、pc3、pc4執行:
systemctl start nginx 
pc1執行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts  
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com內容
curl  www.lhj.com
#多次使用訪問反向代理服務器
得到內容
this is  pc3
this is  pc4的比例大概為1:1

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

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

相關文章

Go 與 Rust:導航編程語言景觀

在當今構建軟件時,開發者在編程語言上有著豐富的選擇。兩種脫穎而出的語言是 Go 和 Rust - 都很強大但卻截然不同。本文將從各種因素比較這兩種語言,以幫助您確定哪種更適合您的需求。 我們將權衡它們在并發、安全性、速度、互操作性等方面的方法。我們將…

Ubuntu篇——crontab修改編輯器

輸入命令: crontab -e 如果你的系統是第一次使用crontab服務,會首先讓你選擇一個編輯器 如果已經選擇過編輯器,后續想要修改默認編輯器,可以輸入sudo select-editor進行修改。

【GPU驅動開發】-GPU架構簡介

前言 不必害怕未知,無需恐懼犯錯,做一個Creator! GPU(Graphics Processing Unit,圖形處理單元)是一種專門用于處理圖形和并行計算的處理器。GPU系統架構通常包括硬件和軟件層面的組件。 一、總體流程 應…

Node.js基礎---Express中間件

1. 概念 1.什么是中間件 中間件(Middleware),特指業務流程的中間處理環節 2. Express 中間件的調用流程 當一個請求到達 Express 的服務器后,可以連續調用多個中間件,從而對這次請求進行預處理 3. Express 中間件格式 Express 的中間件&…

每周一算法:雙端隊列廣搜

題目鏈接 電路維修 題目描述 達達是來自異世界的魔女,她在漫無目的地四處漂流的時候,遇到了善良的少女翰翰,從而被收留在地球上。翰翰的家里有一輛飛行車。有一天飛行車的電路板突然出現了故障,導致無法啟動。 電路板的整體結…

Java實戰:SpringBoot集成ZXing實現二維碼生成與解析

一、引言 在信息化社會,二維碼已經深入到生活的各個角落,無論是支付、營銷、信息傳遞,甚至防偽溯源,二維碼都發揮了至關重要的作用。作為Java開發者,我們如何在SpringBoot項目中便捷地實現二維碼的生成與解析呢&#…

4、Redis-Set【常用】

目錄 一、Redis-Set特點 二、常用命令與交并差 三、Redis中Set類型應用場景 一、Redis-Set特點 1、無序:添加的是A,B,C;取出的可能是B,A,C 2、唯一:不允許元素重復 二、常用命令與交并差 常用命令 格式含義例子sadd key members[...]往k…

吳恩達機器學習筆記十四 多輸出的分類 多類和多標簽的區別 梯度下降優化 卷積層

這里老師想講的是multiclass classification和multilable classification的區別,下面是我從其他地方找到的說法: Multiclass classification 多類分類 意味著一個分類任務需要對多于兩個類的數據進行分類。比如,對一系列的橘子,蘋果或者梨的…

Stable Diffusion生成式擴散模型代碼實現原理

Stable Diffusion可以使用PyTorch或TensorFlow等深度學習框架來實現。這些框架提供了一系列的工具和函數,使得開發者可以更方便地構建、訓練和部署深度學習模型。因此可以使用PyTorch或TensorFlow來實現Stable Diffusion模型。 安裝PyTorch:確保您已經安…

Linux命令行與shell腳本編程大全-2.2

第二部分 shell腳本編程基礎 第11章構建基礎腳本 第12章結構化命令 第13章更多的結構化命令 第14章處理用戶輸入 第15章呈現數據 第16章腳本控制 第15章 呈現數據 15.1 理解輸入和輸出 15.1.1 標準文件描述符 Linux 系統會將每個對象當作文件來處理,這包括輸入和…

T3SF:一款功能全面的桌面端技術練習模擬框架

關于T3SF T3SF是一款功能全面的桌面端技術練習模擬框架,該工具針對基于主場景事件列表的各種事件提供了模塊化的架構,并包含了針對每一個練習定義的規則集,以及允許為對應平臺參數定義參數的配置文件。 該工具的主模塊能夠執行與其他特定模…

CDN原理探究

來源于百度: https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通過上圖,我們可以了解到,使用了CDN緩存后的網站的訪問過程變為: 用戶向瀏覽器提供要訪問的域名&#xff…

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么?

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么? 對于4到8人的玩家,推薦的配置是4核16G的CPU和16G的內存。10到20人的玩家選擇8核32G的CPU和32G或以上的內存。2到4人的玩家則建議選擇4核8G的CPU和8G的內存。對于32人的玩家,推…

YOLOV8介紹

原文鏈接: 1、 詳解YOLOv8網絡結構/環境搭建/數據集獲取/訓練/推理/驗證/導出 2、Yolov8的詳解與實戰 3、YOLOV8模型訓練部署(實戰)()有具體部署和訓練實現代碼YOLOV8模型訓練部署(實戰)&…

Mybatis plus核心功能-IService

目錄 1 前言 2 使用方法 2.1 繼承ServiceImpl,> 2.2 基礎業務開發的使用 2.3 復雜業務開發的使用 2.3 Lambda查詢 2.4 Lambda更新 1 前言 我本以為Mapper層的類能夠繼承BaseMapper<XXX>&#xff0c;而不用我們手動寫一些mapper方法已經夠離譜了。沒想到海油膏…

linux上pip3 install torch==1.11和pip3 install torch==1.11+cu115區別

在linux上安裝torch時&#xff0c; 如果環境安裝好了CUDA環境&#xff0c; 那么安裝torch時不用刻意指定帶cuda的版本&#xff0c; 最終安裝的也是支持GPU的torch版本。但是仍然有一些小的區別&#xff0c;主要就是支持CUDA版本的不同。 (leo_py37) pinefieldedge-gpu-01:/dat…

Gradle構建項目

1.自己下載對應的gradle版本到本地。 2.maven國內鏡像&#xff08;settings.gradle中進行配置&#xff09; // google()maven { url https://maven.aliyun.com/repository/public/ }maven { url https://maven.aliyun.com/repository/google/}maven { url https://maven.aliyu…

【機器學習300問】25、常見的模型評估指標有哪些?

模型除了從數據劃分的角度來評估&#xff0c;我上一篇文章介紹了數據集劃分的角度&#xff1a; 【機器學習300問】24、模型評估的常見方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 還可以從一些指標的角度來評估&#xff0c;這篇文章就帶大家從兩個最經典的任務場景介紹…

Day08:基礎入門-算法分析傳輸加密數據格式密文存儲代碼混淆逆向保護

目錄 傳輸數據-編碼型&加密型等 傳輸格式-常規&JSON&XML等 密碼存儲-Web&系統&三方應用 代碼混淆-源代碼加密&逆向保護 思維導圖 章節知識點&#xff1a; 應用架構&#xff1a;Web/APP/云應用/三方服務/負載均衡等 安全產品&#xff1a;CDN/WAF/I…

【stata】漸進式雙重差分/交錯式雙重差分(staggered-DID) 實現過程

Staggered-DID 的實現 為保證本貼的簡潔性與一般適用性,本文并沒有使用現有真實數據,而是模擬了一個一般數據。如果你手中有正在處理好的project數據,可以跳過1.數據生成,直接從2.數據預加工開始。 1.數據生成 (1)數據生成過程 我將隨機生成一個數據來模擬staggered-DID…