Nginx核心功能2

一:正向代理

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

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

1.編譯安裝

(1)安裝支持軟件

在編譯安裝 Nginx 之前,需要安裝一些必要的支持軟件。以常見的 Linux 系統(如 CentOS)為例:

  • gcc:GNU 編譯器套件,用于編譯 Nginx 的 C 代碼,可通過?yum install gcc?安裝。
  • pcre(Perl Compatible Regular Expressions):Perl 兼容正則表達式庫,Nginx 對 URL 等的正則匹配依賴它,安裝命令為?yum install pcre pcre-devel
  • zlib:用于數據壓縮,Nginx 對 HTTP 響應的壓縮會用到,安裝指令是?yum install zlib zlib-devel
  • openssl:提供加密功能,當你需要配置 HTTPS 時會用到,安裝方式為?yum install openssl openssl-devel

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

為了安全和權限管理,不建議以 root 用戶運行 Nginx。

  • 創建用戶組:groupadd nginx
  • 創建用戶并加入用戶組:useradd -r -g nginx nginx
  • 創建日志目錄:mkdir /var/log/nginx
  • 設置目錄權限:chown -R nginx:nginx /var/log/nginx

(3)編譯安裝Nginx?

  1. 下載 Nginx 源碼包,可從官方網站獲取。
  2. 解壓源碼包:tar -zxvf nginx-x.x.x.tar.gzx.x.x?為版本號)
  3. 進入解壓后的目錄:cd nginx-x.x.x
  4. 配置編譯選項,例如:
    ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
    其中?--user?和?--group?指定運行 Nginx 的用戶和組;--prefix?指定安裝目錄;--with-http_ssl_module?表示啟用 HTTPS 模塊。
  5. 編譯并安裝:
    make
    make install

(4)添加Nginx系統服務

為了方便管理 Nginx 的啟動、停止和重啟,可將其添加為系統服務。以 CentOS 7 為例,創建?/etc/systemd/system/nginx.service?文件,內容如下:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target

2.配置正向代理

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

打開 Nginx 配置文件(默認在?/usr/local/nginx/conf/nginx.conf),在?http?塊中添加如下配置示例:

http {upstream target_server {server target.example.com:80;  # 目標服務器地址和端口}server {listen 8080;  # 本地監聽端口location / {proxy_pass http://target_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

(2)驗證正向代理:

? ? ? 配置完成后,重啟 Nginx 服務。在客戶端設置代理服務器為運行 Nginx 的服務器地址和監聽端口(如 8080),然后訪問目標服務器資源,查看 Nginx 日志(/var/log/nginx/access.log)確認請求是否通過正向代理成功轉發。

二:反向代理

? ? ? 反向代理是指代理服務器接受客戶端請求,然后將請求轉發到后端的多個服務器,并將后端服務器的響應返回給客戶端,隱藏了后端服務器的真實地址

1.配置nginx七層代理

(1)環境安裝

? ? 確保已安裝好 Nginx 及相關依賴,安裝過程同正向代理部分的編譯安裝步驟。

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

在 Nginx 配置文件的?http?塊中配置后端服務器組和代理規則,示例如下:

http {upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

(3)驗證轉發效果

? ? ? ?重啟 Nginx 服務后,通過客戶端訪問 Nginx 服務器的 IP 和端口,查看請求是否正確轉發到后端服務器,可查看后端服務器的日志確認請求到達情況。

2.配置nginx四層代理

(1)配置四層代理

在 Nginx 配置文件中使用?stream?塊進行四層代理配置,示例如下:

stream {upstream tcp_backend_servers {server backend1.example.com:3306;server backend2.example.com:3306;}server {listen 3306;proxy_pass tcp_backend_servers;}
}

(2)驗證四層代理

? ? ? 使用客戶端連接到 Nginx 服務器的四層代理端口(如 3306),檢查是否能正確連接到后端服務器,可通過后端服務器的連接日志進行確認。

三:Nginx緩存

? ? ? 使用客戶端連接到 Nginx 服務器的四層代理端口(如 3306),檢查是否能正確連接到后端服務器,可通過后端服務器的連接日志進行確認。

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

緩存功能的核心原理

Nginx 將用戶請求的響應數據存儲在本地緩存中,當有相同請求再次到來時,直接從緩存中返回數據,而無需再次向后端服務器請求。

緩存類型
  • 代理緩存:用于代理請求時,緩存后端服務器的響應內容。
  • 瀏覽器緩存:通過設置 HTTP 響應頭(如?Cache-ControlExpires?等),讓瀏覽器緩存資源,減少重復請求。

2.代理緩存功能設置

(1)反向代理配置

在反向代理的基礎上,添加緩存相關配置,示例如下:

http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}
}

(2)設置緩存功能

? ? proxy_cache_path?指令定義了緩存路徑、層級結構、緩存區域名稱、大小、非活動緩存的過期時間等。proxy_cache?指定使用的緩存區域,proxy_cache_valid?設置不同響應狀態碼的緩存有效期。

(3)驗證緩存功能

? ? ? 重啟 Nginx 服務后,多次請求相同資源,查看 Nginx 日志(/var/log/nginx/access.log)中的緩存命中情況,也可查看緩存目錄下的文件變化來確認緩存是否生效。

四:Nginx rewrite和正則

1.Nginx正則

? ? ? Nginx 支持 Perl 兼容正則表達式(PCRE),用于匹配 URL、請求頭等字符串。常見的正則表達式元字符包括?.(匹配任意單個字符)、*(匹配前面的字符零次或多次)、+(匹配前面的字符一次或多次)、^(匹配字符串開頭)、$(匹配字符串結尾)等。

2.nginx location

(1)location 的語法

location [= | ~ | ~* | ^~] /uri/ { ... }

  • =:精確匹配 URL,優先級最高。
  • ~:區分大小寫的正則匹配。
  • ~*:不區分大小寫的正則匹配。
  • ^~:以指定字符串開頭的匹配,一旦匹配成功就不再進行正則匹配。

(2)location驗證

? ? ? 通過配置不同的?location?塊,訪問相應的 URL,查看 Nginx 是否按照配置的規則進行處理,可通過查看 Nginx 日志(/var/log/nginx/error.log?和?access.log)來確認處理情況。

3.Rewrite

(1)Rewrite語法

rewrite regex replacement [flag];
regex?是用于匹配的正則表達式,replacement?是替換后的字符串,flag?是可選的標志,常見的有:

  • last:停止處理當前?server?塊內后續的?rewrite?指令,重新匹配?location
  • break:停止處理當前?location?內后續的?rewrite?指令。
  • redirect:返回 302 臨時重定向。
  • permanent:返回 301 永久重定向。

(2)rewrite flag驗證

? ? ? 配置不同?flag?的?rewrite?指令,訪問相應的 URL,查看瀏覽器的地址欄變化和 Nginx 的日志記錄,確認?flag?是否按預期工作。

(3)rewrite 中的捕獲組

在正則表達式中使用括號?()?定義捕獲組,在?replacement?中可以使用?$1$2?等引用捕獲組的內容。例如:

rewrite ^/user/(\d+)$ /profile?id=$1 last;

(4)nginx中的set指令

set $variable value;?用于設置變量,可在?rewrite?等指令中使用設置的變量,增強配置的靈活性。例如:

set $new_uri /new_path;
rewrite ^/old_path$ $new_uri last;

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

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

相關文章

高定電視,一場關于生活方式的覺醒

需要有自己的工作室,雇用3個以上專職模特,至少15名全職員工和20名技術工匠?; 每年都要參加巴黎高級時裝周,展示至少50款原創設計; 使用的面料必須高質量、昂貴且不同尋常,設計上注重細節和個性&#x…

用PyTorch搭建卷積神經網絡實現MNIST手寫數字識別

用PyTorch搭建卷積神經網絡實現MNIST手寫數字識別 在深度學習領域,卷積神經網絡(Convolutional Neural Network,簡稱CNN)是處理圖像數據的強大工具。它通過卷積層、池化層和全連接層等組件,自動提取圖像特征&#xff…

Tensorrt 基礎入門

什么是tensorrt? 其他廠商: Qualcomm, Hailo, google TPU tensorrt的優劣勢 使用tensorrt的pipeline tensorrt使用中存在的問題以及解決方案 tensorrt的應用場景 自動駕駛模型部署需要關注的問題: 邊端硬件資源有限 散熱(不能水冷) 實時性&…

Qt 顯示QRegExp 和 QtXml 不存在問題

QRegExp 和 QtXml 問題 在Qt6 中 已被棄用; 1)QRegExp 已被棄用,改用 QRegularExpression Qt5 → Qt6 重大變更:QRegExp 被移到了 Qt5Compat 模塊,默認不在 Qt6 核心模塊中。 錯誤類型解決方法QRegExp 找不到改用 Q…

玩玩OCR

一、Tesseract: 1.下載windows版: tesseract 2. 安裝并記下路徑,等會要填 3.保存.py文件 import pytesseract from PIL import Image def ocr_local_image(image_path):try:pytesseract.pytesseract.tesseract_cmd rD:\Programs\Tesseract-OCR\tesse…

Dify 完全指南(一):從零搭建開源大模型應用平臺(Ollama/VLLM本地模型接入實戰)》

文章目錄 1. 相關資源2. 核心特性3. 安裝與使用(Docker Compose 部署)3.1 部署Dify3.2 更新Dify3.3 重啟Dify3.4 訪問Dify 4. 接入本地模型4.1 接入 Ollama 本地模型4.1.1 步驟4.1.2 常見問題 4.2 接入 Vllm 本地模型 5. 進階應用場景6. 總結 1. 相關資源…

C++ Windows 打包exe運行方案(cmake)

文章目錄 背景動態庫梳理打包方案一、使用 Vcpkg 安裝靜態庫(關鍵基礎配置)1. 初始化 Vcpkg2. 安裝靜態庫(注意 x64-windows-static 后綴) 二、CMakeLists.txt 關鍵配置三、編譯四、驗證 不同平臺代碼兼容\_\_attribute\_\_((pack…

Java學習手冊:Hibernate/JPA 使用指南

一、Hibernate 和 JPA 的核心概念 實體(Entity) :實體是 JPA 中用于表示數據庫表的 Java 對象。通過在實體類上添加 Entity 注解,JPA 可以將實體類映射到數據庫表。例如,定義一個 User 實體類: import ja…

字符串匹配 之 拓展 KMP算法(Z算法)

文章目錄 習題2223.構造字符串的總得分和3031.將單詞恢復初始狀態所需的最短時間 II 靈神代碼模版 區別與KMP算法 KMP算法可用于求解在線性時間復雜度0(n)內求解模式串p在主串s中匹配的未知當然,由于在KMP算法中,預處理求解出了next數組,也就…

安全為上,在系統威脅建模中使用量化分析

*注:Open FAIR? 知識體系是一種開放和獨立的信息風險分析方法。它為理解、分析和度量信息風險提供了分類和方法。Open FAIR作為領先的風險分析方法論,已得到越來越多的大型組織認可。 在數字化風險與日俱增的今天,企業安全決策正面臨雙重挑戰…

游戲引擎學習第259天:OpenGL和軟件渲染器清理

回顧并為今天的內容做好鋪墊 今天,我們將對游戲的分析器進行升級。在之前的修復中,我們解決了分析器的一些敏感問題,例如它無法跨代碼重新加載進行分析,以及一些復雜的小問題。現在,我們的分析器看起來已經很穩定了。…

訊睿CMS模版常用標簽參數匯總

一、模板調用標簽 1、首頁 網站名稱:{SITE_NAME} 標題:{$meta_title}(列表頁通用) Keywords:{$meta_keywords} Description:{$meta_description}2、列表頁 迅睿cms調用本欄目基礎信息標簽代碼 當前欄目…

【C#】Buffer.BlockCopy的使用

Buffer.BlockCopy 是 C# 中的一個方法,用于在數組之間高效地復制字節塊。它主要用于操作字節數組(byte[]),但也可以用于其他類型的數組,因為它直接基于內存操作。 以下是關于 Buffer.BlockCopy 的詳細說明和使用示例&…

記一次pdf轉Word的技術經歷

一、發現問題 前幾天在打開一個pdf文件時,遇到了一些問題,在Win10下使用WPS PDF、萬興PDF、Adobe Acrobat、Chrome瀏覽器打開都是正常顯示的;但是在macOS 10.13中使用系統自帶的預覽程序和Chrome瀏覽器(由于macOS版本比較老了&am…

在Laravel 12中實現4A日志審計

以下是在Laravel 12中實現4A(認證、授權、賬戶管理、審計)日志審計并將日志存儲到MongoDB的完整方案(包含性能優化和安全增強措施): 一、環境配置 安裝MongoDB擴展包 composer require jenssegers/mongodb配置.env …

鏈表高級操作與算法

鏈表是數據結構中的基礎,但也是面試和實際開發中的重點考察對象。今天我們將深入探討鏈表的高級操作和常見算法,讓你能夠輕松應對各種鏈表問題。 1. 鏈表翻轉 - 最經典的鏈表問題 鏈表翻轉是面試中的常見題目,也是理解鏈表指針操作的絕佳練…

架構思維:構建高并發讀服務_使用懶加載架構實現高性能讀服務

文章目錄 一、引言二、讀服務的功能性需求三、兩大基本設計原則1. 架構盡量不要分層2. 代碼盡可能簡單 四、實戰方案:懶加載架構及其四大挑戰五、改進思路六、總結與思考題 一、引言 在任何后臺系統設計中,「讀多寫少」的業務場景占據主流:瀏…

在運行 Hadoop 作業時,遇到“No such file or directory”,如何在windows里打包在虛擬機里運行

最近在學習Hadoop集群map reduce分布運算過程中,經多方面排查可能是電腦本身配置的原因導致每次運行都會報“No such file or directory”的錯誤,最后我是通過打包文件到虛擬機里運行得到結果,具體步驟如下: 前提是要保證maven已經…

軟考-軟件設計師中級備考 11、計算機網絡

1、計算機網絡的分類 按分布范圍分類 局域網(LAN):覆蓋范圍通常在幾百米到幾千米以內,一般用于連接一個建筑物內或一個園區內的計算機設備,如學校的校園網、企業的辦公樓網絡等。其特點是傳輸速率高、延遲低、誤碼率低…

【C#】.net core6.0無法訪問到控制器方法,直接404。由于自己的不仔細,出現個低級錯誤,這讓DeepSeek看出來了,是什么錯誤呢,來瞧瞧

🌹歡迎來到《小5講堂》🌹 🌹這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。🌹 🌹溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!&#…