Nginx核心功能02

目錄

一,正向代理

1,編譯安裝Nginx

(1)安裝支持軟件

(2)創建運行用戶,組和日志目錄

(3)編譯安裝Nginx

(4)添加Nginx系統服務

2,配置正向代理

(1)編輯主配置文件添加正向代理相關配置

(2)驗證正向代理

二,反向代理

1,配置nginx七層代理

(1)環境安裝

(2)配置nginx七層代理轉發

(3)驗證轉發效果

2,配置nginx四層代理

(1)配置四層代理

(2)驗證四層代理

三,Nginx緩存

1,緩存功能的核心原理和緩存類型

2,代理緩存功能設置

(1)反向代理配置

(2)設置緩存功能

四,Nginx rewrite和正則

1,Nginx正則

2,nginx location

(1)location 的語法

3,Rewrite

(1)Rewrite 語法


一,正向代理

正向代理(Forward Proxy)是一種位于客戶端和原始服務器之間的代理服務器,其主要作用是將客戶端的請求轉發給目標服務器,并將響應返回給客戶端Nginx的正向代理充當客戶端的“中間人”,代表用戶訪問外部資源并隱藏真實IP它是企業內網管控、安全審計與加速訪問的核心工具。用于場景一般是:

內網訪問控制:限制員工訪問特定網站(如社交媒體)
匿名訪問:通過代理服務器隱藏用戶真實身份。
資源緩存加速:緩存公共資源(如軟件包、鏡像文件),減少外網帶寬消耗。

1,編譯安裝Nginx

Nginx的配置及運行需要pcre、zlib等軟件包的支持,因此應預先安裝這些軟件的開發包(devel),以便提供相應的庫和頭文件,確保ginx的安裝順利完成。

(1)安裝支持軟件

(2)編譯安裝Nginx

配置Nginx的編譯選項時,將安裝目錄設為/usr/local/nginx,運行用戶和組均設為nginx;啟用http_stub_status_module模塊以支持狀態統計,便于查看服務器的連接信息。具體項根據實際需要來定,配置前可參考“./configure--help”給出的說明。

--user=nginx#指定nginx運行用戶
--group=nginx#指定nginx運行組
--with-http ssl module#支持https://
--with-http_v2_module#支持http版本2
--with-http realip module#支持ip透傳
--with-http_stub_status_module#支持狀態頁面
--with-http_gzip_static module#支持壓縮
--with pcre#支持正則
--with-stream#支持tcp反向代理
--with-stream ssl module#支持tcp的ssl加密
--with-stream realip module#支持tcp的透傳ip
--add-module=./ngxhttp proxy connect module#支持https轉發(默認nginx不支持https轉發,需要添加第三方模塊)

為了使Nginx服務器的運行更加方便,可以為主程序nginx創建鏈接文件,以便管理員直接執行“nginx”命令就可以調用Nginx的主程序。

(3)添加Nginx系統服務

2,配置正向代理

(1)編輯主配置文件添加正向代理相關配置

(2)驗證正向代理

二,反向代理

Nginx的七層(應用層)反向代理基于HTTP/HTTPS協議,深度解析應用層內容(如URL、Header、Cookie),將客戶端請求精準轉發至后端服務器。作為企業級架構的“智能調度器”,它實現了負載均衡、安全隔離與性能優化的核心能力。應用場景一般是:

負載均衡:將流量分發至多臺后端服務器,避免單點故障。

動靜分離:

靜態資源(圖片、CSS/JS)由Nginx直接響應,動態請求(PHP、API)轉發至Apache/Tomcat.
SSL終端:統一處理HTTPS加密/解密,降低后端服務器計算壓力。
灰度發布:根據請求特征(如IP、Header)將部分流量導向新版本服務。

Nginx的四層(網絡層)反向代理基于TCP/UDP協議,直接轉發原始數據流,不解析應用層內容。它專為高性能、低延遲的傳輸層場景設計,是數據庫、游戲服務器等非HTTP服務的理想選擇。應用場景一般是:

數據庫代理:對外暴露統一端口,內部轉發至MySQL、Redis集群。
?
游戲服務器:代理UDP協議,實現實時數據包負載均衡。

SSH跳板機:

通過端口映射安全訪問內網服務器。
高可用服務:TCP服務(如MQTT)的主備切換與健康檢查。

反向代理,指的是瀏覽器/客戶端并不知道自己要訪問具體哪臺目標服務器,只知道去訪問代理服務器,代理服務器再通過反向代理+負載均衡實現請求分發到應用服務器的一種代理服務。
反向代理服務的特點是代理服務器代理的對象是應用服務器,也就是對于瀏覽器/客戶端 來說應用服務器是隱藏的。

1,配置nginx七層代理

通過配置nginx七層代理實現轉發nginx請求至后端的httpd服務,通過該轉發也能實現nginx+httpd的動靜分離,動靜分離會在后續章節介紹

(1)環境安裝

(2)配置nginx七層代理轉發

上述配置中,使用upstream定義后端應用服務器的地址池“backend”,在location塊中,使用proxy_pass,轉發請求至后端地址池,proxy_set_header Host $host:將請求中的Host頭部設置為客戶端請求的主機名,proxy_set header X-Real-IP$remote_addr:將請求中的X-Real-IP頭部設置為客戶端的真實IP地址。

(3)驗證轉發效果

后端地址池中也可以定義多臺主機,實現負載均衡

2,配置nginx四層代理

SSH協議是基于TCP協議的,配置nginx的四層代理,實現代理ssh請求至后端服務器,用以登錄內網服務器場景

(1)配置四層代理

配置文件

(2)驗證四層代理

第二臺驗證

三,Nginx緩存

Nginx的緩存功能是其核心能力之一,主要用于加速內容響應和降低后端服務器負載它的緩存功能主要基于反向代理(ProxyCache),但也可用于其他場景(如FastCGI 緩存)。以下是詳細解析:

1,緩存功能的核心原理和緩存類型

緩存類型作用場景
代理緩存反向代理模式下緩存后端服務器(如Tomcat、Apache)的響應內容。

FastCGI 緩存

緩存PHP/Python等通過FastCG協議處理的動態內容(需配合PHP-FPM使用)。
uWSGI/SCGI 緩存似 FastCGI,用于其他后端協議。
靜態資源緩存通過 expires指令設置客戶端瀏覽器緩存(非服務端緩存)。

代理緩存原理:
第一步:客戶端第一次向Nginx請求數據A;

第二步:當Nginx發現緩存中沒有數據A時,會向服務端請求數據A:

第三步:服務端接收到Nginx發來的請求,則返回數據A到Nginx,并且緩存在Nginx;

第四步:Nginx返回數據A給客戶端應用:

第五步:客戶端第二次向Nginx請求數據A:

第六步:當Nginx發現緩存中存在數據A時,則不會請求服務端;第七步:Nginx把緩存中的數據A返回給客戶端應用。

2,代理緩存功能設置

因代理緩存功能需在反向代理模式下緩存啟端服務器(如Tomcat、Apache)的響應內容需要先配置七層反向代理

(1)反向代理配置

(2)設置緩存功能

關鍵配置解析

proxy_cache_path:定義緩存文件的存儲路徑
levels=1:2:定義緩存目錄的層級結構,1evels=N:M,表示緩存文件路徑的層級深度

keys_zone=my_cache:10m?

定義共享內存區域,用于存儲緩存鍵(key)和元數據(如過期時間),10m:共享內存區大小(通常每1MB可存儲約8000個鍵)
inactive=60m:定義緩存內容的閑置有效期。60分鐘內未被訪問,將被自動刪除
max size=1g:定義緩存目錄的最大磁盤空間。當緩存量達到1GB 時,Nginx 啟動 LRU(最近最少使用)算法清理舊緩存。
use_temp path=off :控制臨時文件的存儲位置,推薦值:off(減少磁盤操作,提升性能)

(3)驗證緩存功能

curl -r 192.168.10.101

四,Nginx rewrite和正則

已成為現代Web服務的核心組件之一。它不僅是負載均衡、反向代理的首選工具,更是實現流量調度、安全防護和動態路由的關鍵樞紐。而在這其中,Rewrite模塊作為Nginx的“規則引擎”,扮演著至關重要的角色--它賦予開發者精準控制URL的能力,讓請求的流轉不再受限于物理路徑,而是通過邏輯規則靈活適配業務需求。
Rewrite的應用場景
路徑美化:將/product/123轉換為/index.php?id=123
舊鏈接遷移:將過期URL永久重定向(301)到新地址強制HTTPS/域名統一:自動跳轉http://到https://,或合并www與非www域名動態路由:適配單頁應用(SPA)、RESTfuIAPI路由灰度發布:按規則將部分流量導向新版本服務

1,Nginx正則

學習Rewrite之前要熟悉正則表達式,表中列舉出一些常用的正則表達式元事符

字符描述
^匹配輸入字符串的起始位置
$匹配輸入字符串的結束位置

*

匹配前面的字符零次或多次。如"ol“"能匹配"o"及“ol”、"ol"
+匹配前面的字符一次或多次。如“ol+“能匹配"ol"及"oI"、“o“”,但不能匹配“o”
?匹配前面的字符零次或一次,例如"do(es)?"能匹配“do"或者“does","?“等效于”(0,1}
.匹配除“""之外的任何單個字符,若要匹配包括“""在內的任意字符,請使用諸如“[\n]之類的模式
\將后面接著的字符標記為一個特殊字符或一個原義字符或一個向后引用。如\匹配個換行符,而“\$"則匹配“$”
\d匹配純數字
{n}重復n次
{n,}重復n次或更多次
{n,}匹配單個字符c
[a-z]匹配 a-z小寫字母的任意一個
[a-zA-Z]匹配a-z小寫字母或A-Z大寫字母的任意一個

2,nginx location

在學習rewrite前還要了解下location,因為rewrite 通常會與 location 結合使用,但并非絕對。二者的協作能實現更精細的路徑控制,1ocation是Nginx中用于匹配請求URI(路徑:只能對域名后邊的除去傳遞的參數外的字符串起作用,例如http://www.kgc.com/index.php?id=1 只匹配/index.php)的核心指令,用于根據請求路徑定義不同的處理邏輯(如靜態資源服務、反向代理、重定向等)

(1)location 的語法

location[匹配模式]{
#處理邏輯(如root,proxy_pass,rewrite等)

匹配模式類型:

模式說明
location /uri普通前綴匹配:匹配以指定路徑開頭的 URI

location=/精確匹配:

僅匹配完全相同的URI(優先級最高)。
location~
?
區分大小寫的正則表達式匹配。
location~*正則匹配:不區分大小寫的正則表達式匹配。
location·~精確前綴匹配:匹配前綴路徑后,不再檢查正則匹配(優先級高于正則)。
location/通用匹配:默認方式,優先級最低,其他方式匹配不到時匹配

location 的優先級規則:
精確匹配 〉精確前綴匹配 〉正則匹配( 和 *同時存在時,文件中物理位置靠上的優先)>普通前綴匹配>通用匹配。

3,Rewrite

(1)Rewrite 語法

rewrite<regex><replacement>[flag];
regex:正則匹配URL字符串(只能對域名后邊的除去傳遞的參數外的字符串起作用,例如
http://www.kgc.com/index.php?id=l 只對/index.php 重寫)
replacement:重寫跳轉后的地址
flag類型:

last:重寫后的URI 會重新觸發的指令,是默認類型
break:重寫后的URI不會重新匹配location,直接在當前location中處理,且后續的 rewrite 指令不再執行
redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址,爬蟲不會更新url(因為是臨時)
permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址,爬蟲更新url 。

在實際工作的應用中,Nginx跳轉需求有三種方式可實現。可以直接用rewrite進行匹配跳轉,也可以使用if匹配全局變量后跳轉。另外,還可以使用1ocation匹配再跳轉所以rewrite 只能放在 server、if{}、location{}配置段中

1.server{}塊中的rewrite
執行順序:在請求進入server塊后、匹配location前執行。
作用域:影響該server塊下所有請求(全局生效)。

2.location{}塊中的rewrite執行順序:在請求匹配到該location后執行。

作用域:僅對該location匹配的請求生效(局部生效)。
3.if{}塊中的 rewrite

執行順序:在滿足if 條件時觸發。

作用域:依賴if表達式所在的上下文(如在server中或location中)。

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

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

相關文章

rk3568安全啟動功能實踐

本文主要講述筆者在rk3568芯片上開發安全啟動功能實踐的流程。其中主要參考瑞芯微官方文檔《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文檔中描述邏輯不是很清晰而且和當前瑞芯微的sdk中安全啟動的流程匹配度不高。本文就不再對瑞芯微官方文檔的內容…

[操作系統] 線程互斥

文章目錄 背景概念線程互斥的引出互斥量鎖的操作初始化 (Initialization)靜態初始化動態初始化 加鎖 (Locking)阻塞式加鎖非阻塞式加鎖 (嘗試加鎖/一般不考慮) 解鎖 (Unlocking)銷毀 (Destruction)設置屬性 (Setting Attributes - 通過 pthread_mutex_init) 鎖本身的保護互斥鎖…

【神經網絡與深度學習】兩種加載 pickle 文件方式(joblib、pickle)的差異

引言 從深度學習應用到數據分析的多元化需求出發&#xff0c;Python 提供了豐富的工具和模塊&#xff0c;其中 pickle 和 joblib 兩種方式在加載數據文件方面表現尤為突出。不同場景對性能、兼容性以及后續處理的要求不盡相同&#xff0c;使得這兩種方式各顯優勢。本文將通過深…

Electron 入門指南

Electron 入門指南 Electron 是一個使用 JavaScript、HTML 和 CSS 構建跨平臺桌面應用的框架。通過 Electron&#xff0c;你可以利用 Web 技術開發出功能強大的桌面應用程序&#xff0c;并且能夠運行在 Windows、Mac 和 Linux 系統上。 本文將帶你從零開始構建一個簡單的 Ele…

編程中如何與AI交互-結構化輸入和理解確認機制

一 結構化輸入是什么 &#x1f4cc; 結構化輸入的定義&#xff1a; 結構化輸入是指以清晰、分層、有邏輯的格式向 AI 輸入信息&#xff0c;使其更容易解析內容、抓住重點&#xff0c;并準確回答問題。 &#x1f4e6; 舉個例子&#xff08;編程場景&#xff09;&#xff1a; 非…

13:傅里葉變換

傅立葉變換(FT, Fourier Transform)的作用是將一個信號由時域變換到頻域。其實就是把數據由橫坐標時間、縱坐標采樣值的波形圖格式&#xff0c;轉換為橫坐標頻率、縱坐標振幅(或相位)的頻譜格式。換后可以很明顯地看出一些原先不易察覺的特征。 有些信號在時域上是很難看出什么…

基于單片機的音頻信號處理系統設計(一)

項目名稱:基于單片機的音頻信號處理系統設計學院名稱:信息學院學生姓名:學號專業年級:指導教師:教師職稱:教授企業導師:目 錄 摘 要 Abstract 1 前言 1.1研究背景與意義 <

機器學習實操 第一部分 機器學習基礎 第8章 降維技術

機器學習實操 第一部分 機器學習基礎 第8章 降維技術 內容概要 第8章探討了降維技術&#xff0c;這些技術在處理高維數據時至關重要。高維數據不僅會使訓練過程變得極其緩慢&#xff0c;還會增加找到良好解決方案的難度&#xff0c;這就是所謂的維度災難問題。幸運的是&#…

微信小程序 XSS 防護知識整理

場景1&#xff1a;用戶輸入表單&#xff08;如評論框&#xff09; 錯誤做法&#xff1a;直接渲染未過濾的用戶輸入 // WXML <view>{{ userInput }}</view>// JS&#xff08;用戶輸入了惡意內容&#xff09; Page({data: { userInput: <script>alert("…

MySQL 服務搭建

&#x1f4a2;歡迎來到張翊塵的開源技術站 &#x1f4a5;開源如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 在線安裝Ubuntu/Debian更新系統包索引安裝 MySQL …

【Java面試筆記:進階】23.請介紹類加載過程,什么是雙親委派模型?

Java的類加載機制是JVM的核心組成部分,其過程分為三個階段,并采用雙親委派模型來保證類加載的安全性和一致性。 1.類加載過程 1.加載階段(Loading) 核心任務:查找并加載類的二進制字節流(如.class文件)。具體行為: 將字節碼數據從不同數據源(如文件系統、網絡等)讀…

UN R79 關于車輛轉向裝置形式認證的統一規定(正文部分1)

UN R79法規是針對轉向裝置的型式認證法規&#xff0c;涉及A/B1/C類的橫向控制輔助駕駛功能&#xff0c;對各功能的功能邊界、性能要求、狀態提示、故障警示以及型式認證要提交的信息做了規范&#xff0c;本文結合百度文心一言對法規進行翻譯&#xff0c;并結合個人理解對部分內…

[隨筆] 升級uniapp舊項目的vue、pinia、vite、dcloudio依賴包等

匯總 # 升級uniapp項目dcloudio整體依賴&#xff0c;建議執行多次 # 會順帶自動更新/升級vue的版本 npx dcloudio/uvmlatest alpha# 檢查 pinia 的最新版本 npm view pinia version# 更新項目 pinia 到最新版本 npm update pinia# 更新項目 pinia 到特定的版本 # 首先&#xf…

【使用小皮面板 + WordPress 搭建本地網站教程】

&#x1f680; 使用小皮面板 WordPress 搭建本地網站教程&#xff08;快速上手&#xff09; 本教程將手把手教你如何使用 小皮面板&#xff08;XAMPP 類似工具&#xff09; 和 WordPress 搭建一個完全本地化的網站環境。適合 初學者 / 博主 / Web開發者 本地練習使用&#xf…

[更新完畢]2025五一杯A題五一杯數學建模思路代碼文章教學:支路車流量推測問題

完整內容請看文章最下面的推廣群 支路車流量推測問題 摘要 本文針對支路車流量推測問題展開研究&#xff0c;通過建立數學模型解決不同場景下的車流量分析需求。 針對問題一&#xff08;Y型道路場景&#xff09;&#xff0c;研究兩支路匯入主路的車流量推測。通過建立線性增長…

前端面試寶典---webpack原理解析,并有簡化版源碼

前言 先看一下webpack打包后的bundle.js&#xff0c;前邊的直接掃一眼就過&#xff0c;可以發現這個立即執行函數的形參就是一個&#xff0c;key為引入文件路徑&#xff0c;value為該模塊代碼的函數。 所以比較重要的就是通過webpack的配置文件中的entry的入口文件&#xff0c…

面試的各種類型

面試是用人單位選拔人才的重要環節&#xff0c;常見的面試類型有結構化面試、半結構化面試、非結構化面試和壓力面試&#xff0c;每種類型都有其特點和應對策略。 一、結構化面試 特點&#xff1a; 標準化流程 面試流程固定&#xff0c;考官會按照預先設計好的問題清單依次向…

vue3定義全局防抖指令

文章目錄 代碼參數講解 在寫項目時&#xff0c;總會有要進行防抖節流的時候&#xff0c;如果寫一個debounce函數的話 用起來代碼總會是有點長的&#xff0c;因此想到了用一個全局指令進行輸入框的防抖&#xff0c;畢竟全局指令使用時只要v-xxx就行了&#xff0c;非常方便 代碼…

WebDeveloper 流量分析、sudo提權,靶場通關WP

一、信息收集 1、主機探測 arp-scan -l netdiscover -i eth0 -r 192.168.33.0/24 nmap -sP 192.168.66.0/24 2、端口掃描 nmap -sS -sV 192.168.66.141 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) 80/tcp op…

某化工廠運維升級:智和信通運維平臺實現工業交換機智能管理

隨著某化工廠數字化轉型的加速推進&#xff0c;其生產過程對復雜網絡和IT設備的依賴程度日益加深。當前的網絡不僅承載著生產控制系統&#xff08;如DCS、PLC等&#xff09;的通信需求&#xff0c;還同時支持辦公自動化、安防監控、工業物聯網&#xff08;IoT&#xff09;等多種…