nginx2

Nginx反向代理(七層代理)、Nginx的TCP/UDP調度器(四層代理)、

一、Nginx反向代理(七層代理)

步驟:

??? ?部署后端web服務器集群

??? ?配置Nginx代理服務器

??? ??? ?配置upstream集群池

??? ??? ?調節集群池權重比

<img src="/home/student/Desktop/QYF筆記&nsd2411/資源包/image-20241008213058281.png" style="zoom: 67%;" />

1.部署后端web服務器集群

??? ?兩個服務器web1和web2安裝httpd服務,并創建不同網頁用以實驗

```shell
#進入web1操作:
yum -y install httpd
echo "test web1" > /var/www/html/index.html
systemctl enable httpd --now
```

```shell
#進入web2操作:
yum -y install httpd
echo "test web2" > /var/www/html/index.html
systemctl enable httpd --now
```

2.配置Nginx代理服務器:/usr/local/nginx/conf/nginx.conf

> 配置upstream集群池并調節權重比

```shell
http {
...
#使用upstream集群池定義后端服務器集群,集群名稱自定義
#使用server定義集群中的具體服務器和端口
? ? ? upstream webtestserver {
? ? ? ?? ? #設置相同客戶端訪問相同Web服務器
? ? ? ? ?ip_hash;
? ? ? ?? ? #設置權重控制weight后臺服務器訪問比例,權重越大任務的分配量就越大
? ? ? ? ?server 192.168.99.100:80 weight=2;
? ? ? ? ?#設置健康檢查
? ? ? ? ?#max_fails設置后臺服務器連接失敗的次數
? ? ? ? ?#fail_timeout設置后臺服務器連接失敗后再次連接的等待時間
? ? ? ? ?server 192.168.99.200:80 max_fails=2 fail_timeout=30;
? ? ? ? ?#設置down標記使主機暫時不參與集群活動,用于停機修復或者做項目時臨時借調
? ? ? ? ?server 192.168.99.120:80 down;
? ? ? }
? ? ? server {
? ? ? ? ? listen ? ? ? 80;
? ? ? ? ? server_name ?localhost;
??
? ? ? ? ? location / {
? ? ? ? ? ? ? root ? html;
? ? ? ? ? ? ? index ?index.html index.htm;
? ? ? ? ? ? ? #通過proxy_pass將用戶的請求轉發給服務器集群,名稱同上
? ? ? ? ? ? ? proxy_pass http://webtestserver;
? ? ? ? ? }
...
```

> 設置ip_hash后用戶訪問只會被分配給上次請求相同的服務器

二、Nginx的TCP/UDP調度器(四層代理)

使用Nginx實現TCP/UDP調度器功能,采用輪詢的方式調用后端SSH服務器

<img src="image-20241008213311333.png" style="zoom: 67%;" />

```shell
添加stream參數開啟4層代理模塊
./configure --with-stream
/usr/local/nginx/sbin/nginx -V?? ?#查看安裝模塊情況
```

修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
...
stream {?? ??? ??? ??? ??? ??? ? ? #stream與http同級
?? ?upstream testssh { ? ? ? ? ? ? #創建集群,名稱自定義
?? ??? ?server 192.168.99.100:22; ?#后端SSH服務器的IP和端口
?? ??? ?server 192.168.99.200:22;
?? ?}
?? ?server { ? ? ? ? ? ? ? ?#調用集群
?? ??? ?listen 2222; ? ? ? ?#Nginx代理監聽的端口,可以自己定義
?? ??? ?proxy_pass testssh; #調用backend集群
?? ?}
}
http {
...
}
```

重載配置、測試連接到nginx代理服務器監聽的2222接口,而不是代理服務器的22端口或者后端的web服務器

```shell
ssh 192.168.99.5 -p 12345?? ?#使用該命令多次訪問查看輪詢效果
```

三、nginx的優化與查錯

1.優化客戶端使用瀏覽器訪問不存在的頁面192.168.99.5/xxxxxxx時提示404文件未找到

??? ?修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
charset utf-8;?? ??? ??? ??? ??? ?#僅在需要中文時修改該選項,可以識別中文
error_page ? 404 ?/404.html; ? ?#當網站發生404報錯時,給用戶看的頁面

echo "抱歉!您訪問的頁面不存在呢?" > html/404.html
------------------------------------------------------------------
HTTP常見狀態碼列表:
200 正常
301 & 302 重定向
400 請求語法錯誤
401 訪問被拒絕
403 禁止訪問
404 資源找不到
414 請求URI頭部太長
500 服務器內部錯誤
502 代理服務器無法正常獲取下一個服務器正常的應答
```

??? ?重載,測試

2.查看nginx服務網站的狀態信息

??? ?需要使用--with-http_stub_status_module開啟狀態頁面模塊

```shell
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx ?-V
nginx version: nginx/1.22.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC)?
configure arguments: --with-stream --with-http_stub_status_module
```

??? ?修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
server {
? ? listen ? ? ? 80;
? ? server_name ?localhost;
? ? location /status { ??? ? ?#定義狀態頁面
? ? ? ? stub_status on;
? ? ? ? allow 192.168.99.5; ? #允許99.5訪問
? ? ? ? deny all; ? ? ? ? ? ? #其他人全部拒絕
? ? }
? ? charset utf-8;
}
```

??? ?重載,測試

```shell
[root@proxy nginx-1.22.1]# curl 192.168.99.5/status
Active connections: 1?
server accepts handled requests
?1 1 1?
Reading: 0 Writing: 1 Waiting: 0
------------------------------------------------------------------
? ? Active connections:當前活動的連接數量,有多少人訪問網站
? ? Accepts:已經接受客戶端的連接總數量,有多少人曾經來過
? ? Handled:已經處理客戶端的連接總數量
? ? Requests:客戶端發送的請求數量
? ? Reading:當前服務器正在讀取客戶端請求頭的數量
? ? Writing:當前服務器正在寫響應信息的數量,指服務器正在給客戶回應信息
? ? Waiting:當前多少客戶端在等待服務器的響應
```

3.優化Nginx并發量

??? ?并發測試,使用測試主機作為海量客戶訪問proxy主機

```shell
#-n任務量,-c是連接數
ab -n 10000 -c 10000 http://192.168.99.5/

socket: Too many open files (24)?? ?#linux系統有限制,文件打開數量不超過1024
```

??? ?優化Linux內核參數可打開最大文件數量(臨時)

```shell
ulimit -n?? ??? ??? ?#查看最大文件數量
ulimit -n 100000 ? ?#臨時設置最大文件數量
```

??? ?修改后,再次測試;?? ?

??? ?設置可打開最大文件數量目錄(永久):/etc/security/limits.conf

```shell
* ? ? ? ? ? ? ? soft ? ?nofile ? ? ? ? ? ?100000
* ? ? ? ? ? ? ? hard ? ?nofile ? ? ? ? ? ?100000
#用戶或組 ? 軟限制或硬限制 ?需要限制的項目 ? ? ?限制的值
```

??? ?重啟系統生效

??? ?服務器主機增加并發量修改Nginx配置文件目錄:/usr/local/nginx/conf/nginx.conf

```shell
worker_processes ?2; ? ? #與真機CPU核心數量一致
events {
? ? ? ?worker_connections ?50000;?? ?單個工作進程可接受訪問的數量
}
```

??? ?重載,測試

4.優化Nginx數據包頭緩存支持超長地址

??? ?默認情況下nginx無法支持長地址欄,會報414錯誤

??? ?修改Nginx配置文件,增加數據包頭部緩存大小

```shell
http {
? ? client_header_buffer_size ? ?200k; ? ?#請求包頭信息的緩存大小,默認1k
? ? large_client_header_buffers ?4 200k; ?#請求包頭部信息的緩存個數與容量
? ? include ? ? ? mime.types;
? ? default_type ?application/octet-stream;
?? ?....
}
```

??? ?重載,測試

5.瀏覽器本地緩存靜態數據

??? ?修改Nginx配置文件,定義對靜態頁面的緩存時間

```shell
server {
... ?
? ? location ~* \.(jpg|txt|png|html|php)$ {
? ? ?? ?expires 30d; ?#新添加,定義客戶端緩存時間為30天
? ? }
....
}
```

??? ?重載,測試,火狐瀏覽器查看本地緩存數據訪問about:cache

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

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

相關文章

調用kimi api

官網支持python&#xff0c;curl和node.js 因為服務器剛好有php環境&#xff0c;所以先用curl調個普通的語音溝通api <?php // 定義 API Key 和請求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析,包括語法、功能、鎖機制、使用場景及示例代碼

以下是關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析&#xff0c;包括語法、功能、鎖機制、使用場景及示例代碼&#xff1a; 1. UPDATE 語句 功能 直接修改數據&#xff1a;立即更新表中的數據&#xff0c;并提交修改。無顯式鎖&#xff1a;雖然會自動加鎖&#xff…

在航電系統中提高可靠性的嵌入式軟件設計

1.總線余度設計 數據傳輸采用雙余度總線設計&#xff0c;CANFD為主&#xff0c;RS485為備。發送方將相同的數據分別通過雙總線來發送&#xff0c;接收方優先處理主線數據。由于總線上數據頻率固定&#xff0c;可設置定時器監控主總線的數據&#xff0c;當定時器超時后&#xff…

第十五屆藍橋杯大賽軟件賽省賽Python 大學 C 組:5.回文數組

題目1 回文數組 小藍在無聊時隨機生成了一個長度為 n 的整數數組&#xff0c;數組中的第 i 個數為 ai&#xff0c;他覺得隨機生成的數組不太美觀&#xff0c;想把它變成回文數組&#xff0c;也是就對于任意 i∈[1,n] 滿足 a i a n ? i 1 a_ia_{n?i}1 ai?an?i?1。 小藍…

netty中的WorkerGroup使用詳解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty線程模型中的從Reactor線程組&#xff0c;負責處理已建立連接的I/O讀寫、編解碼及業務邏輯執行。其設計基于主從多Reactor模型&#xff0c;與BossGroup分工協作&#xff0c;共同實現高并發網絡通信的高效處理。 一、WorkerGro…

模運算核心性質與算法應用:從數學原理到編程實踐

目錄 &#x1f680;前言&#x1f31f;數學性質&#xff1a;模運算的理論基石&#x1f4af;基本定義&#xff1a;余數的本質&#x1f4af;四則運算規則&#xff1a;保持同余性的關鍵 &#x1f99c;編程實踐&#xff1a;模運算的工程化技巧&#x1f4af;避免數值溢出&#xff1a;…

#Git 變基(Rebase)案例

適合學習理解的 Git 變基&#xff08;Rebase&#xff09;案例 為了幫助你更好地理解 Git 變基&#xff08;Rebase&#xff09;的操作和效果&#xff0c;下面通過一個簡單的案例來演示變基的過程和影響。 案例背景 假設我們有一個 Git 倉庫&#xff0c;包含兩個分支&#xff1…

泰博云平臺solr接口存在SSRF漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 SSRF漏洞是一種在未能獲取服務器…

MyBatis 動態SQL 詳解!

目錄 一、 什么是動態 SQL&#xff1f;二、 為什么需要動態 SQL&#xff1f;三、 MyBatis 動態 SQL 標簽四、 標簽詳解及示例1、 if 標簽2、 choose、when、otherwise 標簽3、 where 標簽4、 set 標簽5、 foreach 標簽6、 sql、include 標簽 五、 總結 &#x1f31f;我的其他文…

阿里云服務器遭遇DDoS攻擊有爭議?

近年來&#xff0c;阿里云服務器頻繁遭遇DDoS攻擊的事件引發廣泛爭議。一方面&#xff0c;用戶質疑其防御能力不足&#xff0c;導致服務中斷甚至被迫進入“黑洞”&#xff08;清洗攻擊流量的隔離機制&#xff09;&#xff0c;輕則中斷半小時&#xff0c;重則長達24小時&#xf…

如何在Springboot的Mapper中輕松添加新的SQL語句呀?

在如今的軟件開發界&#xff0c;Spring Boot可是非常受歡迎的框架哦&#xff0c;尤其是在微服務和RESTful API的構建上&#xff0c;真的是讓人愛不釋手&#xff01;今天&#xff0c;我們就來聊聊如何為Spring Boot項目中的Mapper添加新的SQL語句吧&#xff01;說起來&#xff0…

Qt 中 findChild和findChildren綁定自定義控件

在 Qt 中&#xff0c;findChild 和 findChildren 是兩個非常實用的方法&#xff0c;用于在對象樹中查找特定類型的子對象。這兩個方法是 QObject 類的成員函數&#xff0c;因此所有繼承自 QObject 的類都可以使用它們。當您需要查找并綁定自定義控件時&#xff0c;可以按照以下…

leecode第19天

15、三數之和 # 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c; # 同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為 0 且不重復的三元組。 # 注意&#xff1a;答案中不可以包含重復…

2109. 向字符串添加空格

2109. 向字符串添加空格 題目鏈接&#xff1a;2109. 向字符串添加空格 代碼如下&#xff1a; class Solution { public:string addSpaces(string s, vector<int>& spaces) {string res "";int j 0;//直接遍歷即可for (int i 0;i < spaces.size();i…

Java Spring Boot 與前端結合打造圖書管理系統:技術剖析與實現

目錄 運行展示引言系統整體架構后端技術實現后端代碼文件前端代碼文件1. 項目啟動與配置2. 實體類設計3. 控制器設計4. 異常處理 前端技術實現1. 頁面布局與樣式2. 交互邏輯 系統功能亮點1. 分頁功能2. 搜索與篩選功能3. 圖書操作功能 總結 運行展示 引言 本文將詳細剖析一個基…

CSRF跨站請求偽造——入門篇【DVWA靶場low級別writeup】

CSRF跨站請求偽造——入門篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻擊 0. 前言 本文將帶你實現一次完整的CSRF攻擊&#xff0c;內容較為基礎。需要你掌握的基礎知識有&#xff1a; 了解cookie&#xff1b;已經安裝了DVWA的靶場環境&#xff08;本地的或云的&#xff09;&am…

BT-Basic函數之首字母R

BT-Basic函數之首字母R 文章目錄 BT-Basic函數之首字母Rrandomizercallremoterenamereportreport clearreport fault syndromereport isreport level isreport outreport usingre?savere?storereturnrevision$rexitrinitrli$rndrotaterpmcrpsrun randomize 以下是這段英文的…

CentOS 7 如何掛載ntfs的移動硬盤

CentOS 7 如何掛載ntfs的移動硬盤 前言一、查看硬盤并嘗試掛載(提示無法掛載)二、yum安裝epel-release提示yum被鎖定三、強行終止yum的進程四、yum安裝epel-release完成五、yum安裝ntfs-3g六、此時可正常掛載NTFS硬盤 前言 CentOS 7默認情況下是不支持NTFS的文件系統&#xff…

面試常考簡單操作

參考文章 面試常考簡單操作 快速排序歸并排序Dijkstra自定義排序交替打印奇偶數冒泡排序插入排序堆排序歐幾里得算法求最大公約數單例模式的雙重校驗LRU 快速排序 public class Solution {private static int partition(int[] arr, int left, int right) {int temp arr[left]…

2025圖像處理和深度學習國際學術會議(IPDL 2025)

重要信息 官網&#xff1a;www.IPDL.xyz 時間&#xff1a;2025年4月11-13日 地點&#xff1a;中國-成都 簡介 隨著深度學習和圖像處理技術的迅速發展&#xff0c;相關技術的應用逐漸滲透到各個行業&#xff0c;如醫療影像分析、自動駕駛、安防監控和智能制造等。這些應用的…