Nginx功能及應用全解:從負載均衡到反向代理的全面剖析

Nginx作為一款開源的高性能HTTP服務器和反向代理服務器,憑借其高效的資源利用率和靈活的配置方式,已成為互聯網領域中最受歡迎的Web服務器之一。無論是作為HTTP服務器、負載均衡器,還是作為反向代理和緩存服務器,Nginx的多種功能廣泛應用于現代Web架構中。本篇博客將全面解析Nginx的核心功能及其實際應用場景,并結合代碼示例幫助大家更好地理解如何在實際項目中利用Nginx。

一、Nginx概述

Nginx(Engine-X)是一款高性能的Web服務器,最初由俄羅斯程序員Igor Sysoev開發。它基于事件驅動架構,具有非常高的并發處理能力和低內存消耗。在許多大型互聯網企業中,Nginx作為Web服務器和反向代理服務器得到了廣泛應用。

Nginx最初的設計目標是作為一個高性能的HTTP服務器來應對高并發的請求,但隨著時間的推移,Nginx逐漸具備了更多的功能,成為了一款多功能的服務器軟件。以下是Nginx的幾大主要功能:

  1. 反向代理服務器
  2. 負載均衡器
  3. 靜態資源服務器
  4. 緩存服務器
  5. Web應用防火墻(WAF)
  6. HTTPS加速器

二、Nginx的主要功能

1.?反向代理

反向代理服務器是一種代理服務器,它的功能是將客戶端的請求轉發到后端服務器上。在Nginx中,反向代理非常常見,并且是最基礎的應用場景之一。通過設置反向代理,Nginx可以接收客戶端的請求,然后將請求轉發到實際的Web服務器或應用服務器上。

示例:基本的反向代理配置

nginx

server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:8080;}
}

在這個配置中,所有發送到example.com的請求都會通過Nginx轉發到本地的127.0.0.1:8080,通常是后端的Web應用服務器。

2.?負載均衡

Nginx不僅可以做反向代理,還能夠通過負載均衡的功能將流量分發到多個后端服務器上,從而提高系統的可用性和伸縮性。Nginx支持多種負載均衡算法,如輪詢、加權輪詢、IP哈希等。

示例:負載均衡配置

nginx

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://backend;}}
}

在這個示例中,Nginx將客戶端的請求通過upstream模塊負載均衡地分發到三臺后端服務器(backend1.example.combackend2.example.combackend3.example.com)。默認情況下,Nginx采用輪詢算法來分配請求。

常見的負載均衡算法:
  • 輪詢(Round-robin)?:請求按順序分配給每個后端服務器。
  • 加權輪詢(Weighted Round-robin)?:為每臺服務器分配一個權重,權重大的服務器會接收更多請求。
  • IP哈希(IP Hash)?:根據客戶端的IP地址決定請求的后端服務器,確保來自同一IP的請求始終轉發到同一個后端服務器。
3.?靜態資源服務器

Nginx作為靜態資源服務器,特別適合用來服務圖片、CSS、JavaScript等靜態文件。相比傳統的Apache服務器,Nginx的靜態文件處理速度更快,且資源占用低。Nginx能夠高效地處理大量并發的靜態文件請求。

示例:配置靜態資源服務

nginx

server {listen 80;server_name static.example.com;location /images/ {root /var/www/static;expires 30d;  # 緩存靜態資源30天}location /css/ {root /var/www/static;expires 30d;}location /js/ {root /var/www/static;expires 30d;}
}

在這個示例中,Nginx將請求發送到static.example.com/images/static.example.com/css/static.example.com/js/的靜態文件,并通過expires指令設置了30天的緩存時間。

4.?緩存服務器

Nginx還可以作為一個緩存服務器,用于緩存靜態內容或動態生成的內容。通過啟用緩存,Nginx能夠加速頁面的加載速度,并減少后端服務器的負載。

示例:配置緩存

nginx

server {listen 80;server_name example.com;location / {proxy_cache my_cache;proxy_cache_valid 200 1h;  # 緩存1小時proxy_cache_valid 404 1m;  # 緩存404錯誤頁面1分鐘}
}

在此配置中,Nginx會緩存返回狀態碼為200的請求1小時,404錯誤頁面會緩存1分鐘。proxy_cache指令指定了緩存的存儲區域(my_cache)。在實際應用中,可以使用緩存來減少數據庫查詢頻率,提高性能。

5.?Web應用防火墻(WAF)

Nginx通過與第三方模塊(如ModSecurity)結合使用,可以作為Web應用防火墻(WAF)來保護Web應用免受攻擊。Nginx的高并發處理能力使其在防火墻方面具有顯著優勢,能夠快速識別并阻止惡意流量。

6.?HTTPS加速器

在現代Web應用中,HTTPS已經成為安全通信的標準。Nginx可以作為HTTPS加速器,通過SSL/TLS加密來保護用戶的通信數據。通過啟用Nginx的SSL模塊,可以輕松配置HTTPS。

示例:HTTPS配置

nginx

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {proxy_pass http://127.0.0.1:8080;}
}

在這個示例中,Nginx配置了HTTPS并加載了SSL證書。當用戶訪問https://example.com時,Nginx將會加密請求并轉發到后端服務器。

三、Nginx應用場景

Nginx在互聯網系統中的應用場景十分廣泛,主要包括:

  1. Web服務器:在中小型網站或作為反向代理的一部分,Nginx常作為Web服務器提供服務。
  2. 反向代理和負載均衡:Nginx廣泛應用于大規模網站的流量分發和負載均衡,常常作為Web應用的前端代理。
  3. API網關:Nginx能夠作為API網關進行API流量管理,控制請求的路由和訪問權限。
  4. 微服務架構:在微服務架構中,Nginx可以作為微服務之間的代理,管理不同服務的請求和流量。
  5. 高并發的靜態文件服務:Nginx非常適合用作大流量網站的靜態文件服務器,處理如圖片、視頻等大流量靜態資源請求。

四、總結

Nginx作為一款開源的高性能Web服務器,其功能不僅限于傳統的Web服務器角色,還可以充當反向代理、負載均衡器、緩存服務器、HTTPS加速器等。憑借其輕量級、高效性和靈活性,Nginx已成為現代互聯網架構中不可或缺的一部分。在實際開發中,合理配置和運用Nginx能夠有效提高系統的性能和可擴展性。

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

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

相關文章

安徽京準:NTP時間同步服務器操作使用說明

安徽京準:NTP時間同步服務器操作使用說明 3.1 連接天線 天線連接到“ANT”口。 3.2 連接電源 將220V電源線連到AC220V座上或將電源適配器(7.5V~12V)接到DC口上。也可以同時接上,提高供電可靠性。 3.3 LAN網口 網線連接到NTP…

Java項目之基于ssm的懷舊唱片售賣系統(源碼+文檔)

項目簡介 懷舊唱片售賣系統實現了以下功能: 用戶信息管理: 用戶信息新增:添加新用戶的信息。 用戶信息修改:對現有用戶信息進行修改。 商品信息管理: 商品信息添加:增加新的商品(唱片&#x…

基于 Python 的自然語言處理系列(70):檢索增強生成(RAG)

1. 什么是 RAG? 在許多大模型(LLM)應用場景中,我們需要使用特定的用戶數據,而這些數據并未包含在模型的訓練集中。檢索增強生成(Retrieval Augmented Generation,RAG)是一種有效的解…

CAD插件實現:所有文字顯示到列表、縮放、編輯——CAD-c#二次開發

當圖中有大量文字,需要全部顯示到一個列表時并縮放到需要的文字時,可采用插件實現,效果如下: 附部分代碼如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…

Systemd構建自動化備份服務與外部存儲管理

實訓背景 你是一家數據公司的系統管理員,需設計一套自動化備份系統,滿足以下需求: 定期備份:每周日凌晨1點將 /data 目錄壓縮備份到 /backups。外部存儲掛載:插入USB設備時自動掛載到 /mnt/usb,并觸發增量…

PostgreSQL中根據另一表的值來更新一個字段

UPDATE table1 SET value t2.new_value FROM table2 t2 WHERE table1.id t2.reference_id; 解釋 UPDATE table1:指定要更新的表,不要用別名。 SET value t2.new_value:設置要更新的字段及其新值,這里新值來自 table2。也可更…

#SVA語法滴水穿石# (000)斷言基本概念和背景

一、前言 隨著數字電路規模越來越大、設計越來越復雜,使得對設計的功能驗證越來越重要。首先,我們要明白為什么要對設計進行驗證?驗證有什么作用?例如,在用FPGA進行設計時,我們并不能確保設計出來的東西沒有功能上的漏洞,因此在設計后我們都會對其進行驗證仿真。換句話說…

Git 從入門到精通(開源協作特別版)

🧠 Git 從入門到精通(開源協作特別版) ? 基礎命令 🧰 高級用法 🛠? 開源實戰技巧 🌍 GitHub 社區協作 適合:從0開始 → 熟練開發者 → 參與/維護開源項目 🔰 第1章:…

【SQL】取消sql某一列的唯一值key值的方法

在插入數據到sql時,遇到了這個問題: Duplicate entry ‘XXX’ for key 起因是: 我之前設計表的時候,手動給product_title 這個列加了一個key, key 是這個字段的唯一鍵約束,就不能重復在這一列存入重復的數…

【小沐學Web3D】three.js 加載三維模型(React Three Fiber)

文章目錄 1、簡介1.1 Three.js1.2 React Three Fiber 2、測試2.1 初始化環境2.2 app.js修改(顯示內置立方體)2.3 app.js修改(顯示內置球體)2.4 app.js修改(顯示自定義立方體)2.5 app.js修改(顯示…

本地部署 Firecrawl 爬蟲讓 AI 知識庫更豐滿

https://www.firecrawl.dev/ firecrawl-logo-with-fire.png 什么是Firecrawl Firecrawl 是一款 可以將網站轉換為 便于AI處理的Markdown 格式的爬蟲工具 ,主要 提供 API 服務 ,無需站點地圖,只需要接收一個 URL 地址就可以爬取網站及網站下可…

純個人整理,藍橋杯使用的算法模板day2(0-1背包問題),手打個人理解注釋,超全面,且均已驗證成功(附帶詳細手寫“模擬流程圖”,全網首個

算法索引 01背包優化前空間優化版(使用一維數組)優化后的模擬流程圖為何優化后,j不能使用正序遍歷模擬流程圖 代碼對應實現案例 01背包 優化前 /*** 0-1背包問題解法(與下方代碼表格示例對應,已模擬驗證)*…

APang網聯科技項目報告【服務器篇】

APang網聯科技:連接未來,智能領航 公司簡介 APang網聯科技成立于 [2005年],總部位于 [廣東深圳],是一家集網絡技術研發、系統集成、項目實施與運維服務為一體的高新技術企業。我們致力于為客戶提供全方位、定制化的網絡部署解決…

Scade One - 將MBD技術從少數高安全領域向更廣泛的安全嵌入式軟件普及

Scade One是繼Scade Suite version 6自2008年起發展近20年后的首次主要改進版本。在Scade One發布的同時,Scade團隊發布了一系列介紹Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的內容中,將復述博客…

Word在生成PDF后,PDF左側導航書簽目錄錯誤顯示的解決方法

1、打開要轉換的word文件,點擊“開始”,“另存為” 2、保存在本地時,在“保存類型”的下拉列表中選擇“PDF(*.pdf)” 3、選擇完保存類型后,點擊“選項”按鈕 4、在彈出的“選項”框中,選擇“創建…

Windows系統服務器安裝Office Online Server

服務器配置 配置參數OSThe 64-bit edition of Windows Server 2016CPU4RAM8GNetwork開啟Hard disk80GPort80, 443, 809 執行命令 PowerShell中添加Windows服務: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,…

【小沐學Web3D】three.js 加載三維模型(Angular)

文章目錄 1、簡介1.1 three.js1.2 angular.js 2、three.js Angular.js結語 1、簡介 1.1 three.js Three.js 是一款 webGL(3D繪圖標準)引擎,可以運行于所有支持 webGL 的瀏覽器。Three.js 封裝了 webGL 底層的 API ,為我們提供了…

簡單程序語言理論與編譯技術·22 實現一個從AST到RISCV的編譯器

本文是記錄專業課“程序語言理論與編譯技術”的部分筆記。 LECTURE 22(實現一個從AST到RISCV的編譯器) 一、問題分析 1、完整的編譯器(如LLVM)需先完成AST到IR的轉換,并進行代碼優化,再到匯編&#xff0…

JavaWeb 課堂筆記 —— 02 JavaScript

本系列為筆者學習JavaWeb的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)》,章節分布參考視頻教程,為同樣學習…

Python 如何高效實現 PDF 內容差異對比

Python 如何高效實現 PDF 內容差異對比 1. 安裝 PyMuPDF 庫2. 獲取 PDF 內容通過文件路徑獲取通過 URL 獲取 3. 提取 PDF 每頁信息4. 內容對比metadata 差異文本對比可視化對比 5. 提升對比效率通過哈希值快速判斷頁面是否相同早停機制多進程機制 6. 其他 最近有接觸到 PDF 內容…