Nginx 瞭解一下?

来源:https://www.cnblogs.com/wupeixuan/archive/2019/11/01/11774855.html
-Advertisement-
Play Games

這篇文章主要簡單的介紹下 Nginx 的相關知識,主要包括以下幾部分內容: 1. Nginx 適用於哪些場景? 2. 為什麼會出現 Nginx? 3. Nginx 優點 4. Nginx 的編譯與配置 Nginx 適用於哪些場景? 如圖所示,一個請求會先經過 Nginx 到達應用服務層,然後再去訪問 ...


這篇文章主要簡單的介紹下 Nginx 的相關知識,主要包括以下幾部分內容:

  1. Nginx 適用於哪些場景?
  2. 為什麼會出現 Nginx?
  3. Nginx 優點
  4. Nginx 的編譯與配置

Nginx 適用於哪些場景?

Nginx 適用場景

如圖所示,一個請求會先經過 Nginx 到達應用服務層,然後再去訪問數據層(比如 Redis、MySQL 等),提供基本的數據功能。我們的應用服務因為要求開發效率是非常高的,所以它的運行效率是很低的,它的 qps、tps或者併發都是受限的,所以我們需要把很多這樣的應用服務組成集群,向用戶提供高可用服務。而一旦很多服務構成集群的時候,我們需要 Nginx 具備反向代理功能,可以把動態請求傳遞給應用服務。

而當應用服務構成集群,一定會帶來兩個需求:

  1. 需要動態的擴容
  2. 有些服務出現問題的時候我們需要做容災

這樣反向代理必須具備負載均衡功能。

其次在這樣的一個鏈路中, Nginx 是處在企業內網的一個邊緣節點,隨著網路鏈路的增長,用戶體驗到的時延會增加,所以需要把用戶看起來不變的或者在一段時間內看起來不變的動態內容緩存在 Nginx 部分,由 Nginx 直接向用戶提供訪問,這樣用戶時延就會減少很多。所以反向代理延伸出另外一個功能就是緩存,來減少用戶訪問的時延。

像很多 css、js、img 靜態資源,是沒有必要通過應用服務來訪問的,只需要本地文件系統上放置的靜態資源,直接由 Nginx 提供訪問就可以了。這是 Nginx 的靜態資源服務。

應用服務本身的性能存在很多問題,像資料庫服務比應用服務好的多,因為業務場景比較簡單,併發性能和tps都要遠高於應用服務,所以延伸出第三個應用場景:由 Nginx 直接去訪問資料庫、Redis,利用 Nginx 強大的併發性能實現如 web防火牆 複雜的一些業務功能。這就需要api服務有很強的業務處理功能,所以像 OpenResty、 Nginx 集成的 JavaScript,應用 JavaScript、lua 這樣的語言功能和它們語言自帶的一些工具庫來提供完整的 API服務。

為什麼會出現 Nginx?

伴隨著互聯網的快速普及、以及全球化和物聯網的快速發展,導致互聯網的數據量快速增長。

CPU 核數從當初的單核發展到 16 核,甚至 32 核,但是由於操作系統和大量的軟體沒有做好服務於多核架構的準備,致使服務的性能通常不會有成倍的提升。

Apache 的架構模型一個進程同一時間只會處理一個鏈接一個請求,處理完以後才會處理下一個請求。它實際上在使用操作系統的進程間切換的特性,因為操作系統微觀上只有有限的 CPU,但是操作系統被設計為同時服務數百甚至上千的進程,而 Apache 一個進程只能服務於一個鏈接,這樣的模式會導致當 Apache 需要面對幾十萬、幾百萬鏈接的時候,它沒有辦法去開幾十萬、幾百萬的進程;而進程間切換的代價成本又太高了,當併發的連接數越多,這種無謂的進程間切換引發的性能消耗也就越大,而 Nginx 是專門為了這樣的應用場景而生的,Nginx 可以處理數百萬甚至上千萬的併發鏈接。

Nginx 優點

一、高併發,高性能

只要我們對每個鏈接使用的記憶體足夠少就能實現高併發;既要達到高併發又要達到高性能,往往需要很好的設計。

比如現在的主流雲伺服器,nginx 在 32 核 64G 的配置中可以輕鬆達到數千萬的併發鏈接;如果是處理簡單的靜態資源請求,nginx 可以達到 100w 的 RPS 。

RPS(Requests Per Second)為每秒能處理的請求數目,等效於 QPS(Queries Per Second),也就是每秒能處理查詢數目。是一臺伺服器每秒能夠相應的查詢次數,是對一個特定的查詢伺服器在規定時間內所處理流量多少的衡量標準。

二、可擴展性好

可擴展性主要體現在模塊化設計;模塊化設計非常穩定,使得 Nginx 的生態圈、第三方模塊非常豐富。甚至於有 Tengine、OpenResty 這樣的第三方插件在他的基礎之上又生成了新的生態圈。豐富的生態圈和第三方模塊為 Nginx 的豐富功能提供了保證。

三、高可靠性

高可靠性指的是 Nginx 可以伺服器上持續不間斷的運行數年,而很多web伺服器往往運行幾周or幾個月,就需要進行一次重啟。對於 Nginx 這樣一個高併發、高性能的反向代理伺服器而言,往往運行在企業內網的邊緣節點上,這個時候如果我們企業想提供4個9、5個9、甚至更高的高可用性時,對於 Nginx 持續運行能夠宕機的時間一年可能只能以秒來計,所以在這樣一個角色中,Nginx 的高可靠性給我們提供了非常好的保證。

四、熱部署

熱部署是指在不停止服務的情況下升級Nginx。這個功能對於 Nginx 來說非常重要,因為在伺服器上跑了數百萬的併發鏈接,如果是普通的伺服器,我們只能 kill 掉進程再重啟的方式進行升級操作。但是對於 Nginx 而言,因為直接 kill 掉 nginx 進程會給所有的已經建立鏈接的客戶端一個很不好的體驗。

五、BSD 許可證

BSD許可證是指 Nginx 不只是開源的、免費的,而且我們可以在有定製需求的場景下,去修改 Nginx 的源碼,再運行在我們的商業場景下且屬於合法的。

Nginx 組成

Nginx 主要由以下 4 部分組成:

  • Nginx 二進位可執行文件:由各模塊源碼編譯出的一個文件
  • Nginx.conf 配置文件:控制 Nginx 行為
  • access.log 訪問日誌:記錄每一條 http 請求信息
  • error.log 錯誤日誌:定位問題

接下來,我們就要動手去編譯 Nginx 了。

編譯 Nginx

# 下載
wget http://nginx.org/download/nginx-1.14.0.tar.gz
# 解壓
tar -xzvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
# 配置
./configure --prefix=/usr/local/nginx
# 編譯
make
# 安裝
make install

在 configure 過程中可能遇到的問題:

./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre= option.

./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib= option.

出錯的原因是 Nginx 模塊需要依賴一些 lib 庫,解決辦法如下:

安裝 pcre-devel 和 zlib-devel 依賴庫:yum -y install pcre-devel zlib-devel

Nginx 配置

Nginx 配置語法

Nginx配置語法

Nginx 配置參數

配置參數:時間的單位

時間的單位

配置參數:空間的單位

空間的單位

http 配置的指令塊

http配置的指令塊

  • http:表示裡面所有的指令都是由 http 模塊去解析去執行的
  • server:解析對應的功能變數名稱or一組功能變數名稱
  • location:url 表達式
  • upstream:表示上游服務,需要與企業內網服務直連的時候,可以定義一個 upstream

示例

示例

示例中的所有指令都是由 Nginx 中的 http 模塊去執行的,其中 server 127.0.0.1:8000 為需要解析的功能變數名稱,location 後面跟的為對應的匹配規則,expires 3m表示 3 分鐘後 cache 刷新,zone=one:10m表示開闢了一個 10m 大小的共用記憶體空間,給不同的 worker 去使用。

總結

這篇文章主要介紹了 Nginx 出現的原因和使用場景,並分析 Nginx 的優點,最後動手去編譯屬於自己的 Nginx,併進行簡單配置。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先理解兩個概念:基本類型和引用類型的值 1、基本類型和引用類型的值 (1)定義: 基本類型:指簡單的數據段,比如按值訪問的js五種基本數據類型undefined、null、boolean、number、srtring 引用類型的值:指保存在記憶體中的對象,註意一點,js不允許直接操作對象的空間 (2) ...
  • 組件允許你將 UI 拆分為獨立可復用的代碼片段,並對每個片段進行獨立構思。所以當在動手寫代碼之前,要分析UI,如何劃分組件是一個需要在動手之前想清楚的問題,最重要的就是獨立以及可復用。獨立代表不會影響到其他組件,可復用代表省去了很多重覆工作量,所以這兩部分在劃分組件的時候要重點思考。 組件,從概念上 ...
  • 今天我們來畫折線圖 效果圖 以下為模擬數據 首先創建filterData方法 用於過濾數據 text文本 line線段 area圓 tag暫時用不到 今天說的是折線所以創建zrLine 方法 我們在新增一個文件夾創建utli.js這個文件夾的作用為我們把創建線創建圓的公共方法寫在這個js文件里 ut ...
  • 放到我自己的伺服器上了。 網 scale.html 櫻花 sakura.html ...
  • 本技巧來自這篇文章 -- How to animate box-shadow with silky smooth performance 本文不是直譯,因為覺得這個技巧很有意思很有用,遂起一文。 box-shadow 在我們的工作中使用以及越來越多,伴隨陰影的動畫或多或少都有一點。假設,我們有下麵這 ...
  • 2019杭州雲棲大會上,高德地圖技術團隊向與會者分享了包括視覺與機器智能、路線規劃、場景化/精細化定位時空數據應用、億級流量架構演進等多個出行技術領域的熱門話題。現場火爆,聽眾反響強烈。我們把其中的優秀演講內容整理成文並陸續發佈出來,本文為其中一篇。 阿裡巴巴資深技術專家孫蔚在高德技術專場做了題為《 ...
  • 1.代碼生成器: [正反雙向](單表、主表、明細表、樹形表,快速開發利器)freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本、處理類、service等完整模塊2.多數據源:(支持同時連接無數個資料庫,可以不同的模塊連接不同數的據庫)支持N個數據源3.阿裡資料庫連 ...
  • Java 程式員第一個要瞭解的基礎概念就是: "什麼是面向對象編程(OOP)" ? 玩過 DOTA2 (一款推塔殺人的游戲)嗎?裡面有個齊天大聖的角色,歐洲戰隊玩的很溜,國內戰隊卻不怎麼會玩,自家人不會玩自家的神話英雄,實在有點悲哀。 我們用 Java 定義一個孫悟空的類吧: 我們給他兩個屬性(生命 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...