主頁 > 軟體設計 > Nginx安裝及使用方式

Nginx安裝及使用方式

2021-11-02 09:40:12 軟體設計

前言

本篇文章會Nginx得相關概念、安裝使用、官網檔案決議、基于反向代理的負載均衡策略 這幾個點去決議Nginx,保證對Nginx有個大的認識,

簡介

高并發分流

單臺服務器無法滿足當前業務場景下,既然無法滿足,則使用多個服務器進行解決,就是集群產生;怎么樣去分配來的業務請求,這就是如何進行解決高并發分流的問題,出現的負載均衡的框架; 分流限流 、多讀寫少用快取,寫多讀少用緩沖,
分流的技巧、分而治之的思想,因為這個思想才出現了nginx框架的出現,

概述

一個俄國人用 語言撰寫的,開源的高性能的HTTP和反向代理服務軟體,同時也提供
了IMAP/POP3/SMTP服務,Nginx是一款 輕量級的 Web 服務器/ 反向代理服務器及 電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行,其特點是占有記憶體少, 并發能力強,事實上nginx的并發能力在同型別的網頁服務器中表現較好,
Nginx主要應用于靜態資源服務,反向代理服務、API服務
  • 靜態資源主要借助于服務器本地檔案系統來完成
  • 反向代理可以做到 Nginx強大的性能、快取、負載均衡
  • API服務通過集成niginx_lua模塊來實作,比如OpenResty就是用niginx和lua集成特性,整合了大量常用的第三方模塊 ,以及js腳本

正向代理 反向代理

正向代理,代表客戶端進行網路或服務訪問,客戶端也就是正常訪問服務器的,但網路是隔絕的,需要一臺服務器作為網關進行代理服務器 ,這里還是需要指定目標訪問服務器
位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容回傳給客戶端,客戶端才能使用正向代理,
反向代理,代表服務端接收客戶端的請求,服務端的所有資訊都在反向代理服務器中的;反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源,同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定,反向代理服務器通常可用來作為Web加速,即使用反向代理作為Web服務器的前置機來降低網路和服務器的負載,提高訪問效率,

選擇Nginx作為分流負載均衡選擇器

在高并發的互聯網行業,硬體負載均衡器、軟體負載均衡器的選擇
  • 高并發、高性能
    基于NIO非阻塞事件模型處理網路請求, slab記憶體管理機制,
  • 可擴展性好 核心模塊 擴展模塊 第三方插件,豐富的模塊及第三方插件是 nginx生命力頑強的原因,
  • 高可靠性 部署后常年穩定運行
  • 熱部署 無需啟動,更新組態檔
開源 BSD 協議

安裝Nginx

windows安裝

nginx: download進入Nginx下載頁面;

選擇 nginx/Windows-xxx.zip 的安裝包下載, xxx 表示最新的版本
解壓 zip 到你的程式安裝目錄
進入 nginx-xxx 目錄,雙擊 nginx.exe 啟動 Nginx 服務

linux安裝

linux 下面有兩種安裝方式,二進制安裝、通過原始碼編譯安裝,
二進制安裝
  • 檢查更新yum依賴
# 檢查更新yum依賴 
sudo yum install yum-utils
  • 添加yumnginx倉庫地址

  • 安裝nginx,也可以直接使用該命令進行安裝
sudo yum install nginx
通過原始碼編譯安裝
通過原始碼編譯安裝,能夠集成一些默認沒有安裝的模塊以及第三方插件,下面我們來編譯一個攜帶 ssl 和 echo模塊的 Nginx
yum install -y gcc # GCC編譯器,用來編譯C語言程式 
yum install -y gcc-c++ # C++編譯器,用來編譯C++語言程式 
yum install -y pcre pcre-devel # Perl庫兼容正則運算式,Nginx的HTTP模塊要靠它來解 析正則運算式 
yum install -y zlib zlib-devel # zlib庫,用于對HTTP包的內容做gzip格式的壓縮 
yum install -y openssl openssl-devel # OpenSSL開發庫,用于Http的SSL協議,需要原始碼 編譯# 統一執行前面的命令 
sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl- devel
Nginx 需要通過 openssl 原始碼庫來進行安裝 ssl 協議,下載 openssl 原始碼,并解壓
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz # 下載 openssl 
tar -xzvf OpenSSL_1_0_2k.tar.gz # 解壓openssl 
wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz 
tar -xzvf v0.61.tar.gz
配置編譯選項
編譯安裝,通過 confifigure 檔案來操作,用于一些特殊需求、特殊依賴的安裝方式,操作也不是那么難,可以 參考官網 ,也可以參考 confifigure 的幫助檔案,
先了解目錄內容,進入 Nginx 目錄,輸入 ls 查看檔案內容如下圖,里面有一個 confifigure 可執行檔案

在當前默認輸入下面命令,就可以看到對應的幫助檔案

./configure --help

--without/--with 命令,它好比我們的 maven 資源管理,在父專案的 pom 中定義好了依賴的資源,子項 目如果需要使用通過參考即可,
confifigure 命令做了大量的 幕后 作業,包括檢測作業系統內核和已經安裝的軟體,引數的決議,中間目 錄的生成以及根據各種引數生成一些C 原始碼檔案、 Makefifile 檔案等,
執行編譯
sudo make
make 命令根據 confifigure 命令生成的 Makefifile 檔案編譯 Nginx 工程,并生成目標檔案、最終的二進制檔案
安裝
sudo make install
make install 命令根據 confifigure 執行時的引數將 Nginx 部署到指定的安裝目錄,包括相關目錄的建立和 二進制檔案、組態檔的復制,

nginx核心

Nginx常規操作

使用 sudo ./nginx -h 查看 組態檔 組態檔等等,

包括sudo ./nginx -s reload 熱更新組態檔等等,
其他命令,sudo ./nginx -v 查看版本資訊等等,

Nginx的組態檔

Nginx有一個非常強大的組態檔,可以配置應用對應的模塊指令,類似Perl 語法風格,組態檔指令主 要分為兩大塊:簡單指令、塊指令..

  • 簡單指令
簡單的指令由名稱和引陣列成,用空格分隔,以分號 結尾,
  • 塊指令
塊指令,以大括號'{}'
包圍的一組附加指令,塊指令在大括號內可以有其他指令,則稱為背景關系,
在任意背景關系之外的指令稱為主背景關系, http、 events指令放在主背景關系,
server在http中, location在server中.

動靜分離 靜態資源服務

動靜分離術
也是分離的技術,Web服務中,html、js、圖片、css等靜態資源
態資源放在 webapp目錄下,當靜態資源越 來越大時,一個網頁獲取大量靜態資源時,
影響到web服務的整體性能
通過 nginx將靜態資源獨立部署,減輕web服務的壓力,
動態計算的資料則通過 web服務來獲取,
niginx 通過利用分層、切割 、 動靜進行分離 包括靜態資源進行分離、前后端分離,
通過實作一個靜態資源服務,來學習組態檔指令的使用
啟動 niginx,瀏覽器訪問http://hostname:8080

將某些檔案 不用放到服務器上去,降低服務器壓力

Nginx的配置熱更新

nginx如何做到組態檔熱更新?

  • master檢查組態檔的正確性,若是錯誤則回傳錯誤 資訊, nginx繼續用原組態檔進行作業
  • nginx啟動新的worker行程,采用新的組態檔
  • nginx將新的請求分配新的worker行程
  • nginx等待以前的worker行程的全部請求已經都回傳后, 關閉相關 worker行程
  • 重復上面程序,直到全部舊的 worker行程都被關閉掉
nginx中有 worker、 master兩種行程,
master行程負責加載配置、接收命令、監控子行程
worker行程負責處理網路請求

master process 和worker process 兩種行程, 分別做不同的作業,這里自動啟動,全部請求已經都回傳后, 關閉相關 worker行程,如果不保證關閉則會出現服務例外的,

官方檔案

nginx documentation

檔案主要有:首頁、關于、下載頁面、安全、使用檔案、 fap、博客等部分;blog商業資訊,

作為開發人員,主要關注,下載頁面、使用檔案、博客這幾個部分,其中使用
檔案和博客是最為重要的內容,
博客 中涉及一些高級的特性和商業支持, 使用檔案 包含, Nginx常規操作介紹、
功能場景操作、貢獻提交源代碼、 Nginx模塊參考,
常規操作
包含如何編譯安裝 Nginx、初學者指南、管理員指南、 Nginx操作、 Nginx的連接處理事件型別、等資訊,
功能場景配置
一般只有在對應的功能場景下使用配置,例如負載均衡反向代理、 Https服務
在檔案中模塊介紹,包括所有的處理,

Nginx模塊

Nginx 整體設計采用:微核心模塊 插件形式
很多優秀的開源組件都在采用這樣的設計思想,為第三方擴展提供了強大的支撐,
也是 Nginx 受歡迎的原因之一,

核心模塊常用指令

核心功能指令

微核心,包含 user use events,這些核心部分,都比較重要的部分,在官方檔案中存在著,都是塊指令,

http核心指令 要在 其中選擇 對應的核心模塊進行了解,

Location

最常用又最容易弄錯的 Location指令,它可以由 前綴字串 正則運算式 定義

這樣進行匹配起來,字符型別的,

Location匹配規則

當一個請求過來時候, location怎么進行匹配?
首先 nginx檢查使用了前綴字串定義的 location指令塊 選中并記住具有最長匹配前綴的
location指令塊 如有 ^~匹配,則不查找正則運算式,使用該location
然后 按照它們在組態檔中的出現順序檢查正則運算式
正則運算式的搜索在第一次匹配時終止,并使用相應的配置
如果未找到與正則運算式的匹配,則使用先前記住的最長匹配前綴位置的配置
最后 還沒有找到? 接盤俠/

實作高并發分流

單臺服務器qps是有限的,提升請求速率;解決辦法采用集群的方式,而分布式集群則需要使用到負載均衡,

Nginx負載均衡

負載均衡涉及的模塊

upstream
http_upstream 模塊定義一組服務,能被proxy_pass指令參考, upstream name{......} 在http指令塊中,定義一組可以進行負載均衡的上游服務器,并給取個 組名,服務可以是不同的埠、 TCP、UNIX域名套接字, 類似socket套接字
通過 upstream,就能為成千上百臺的后端服務集群提供強有力的支撐,反向代理負載均衡功能,
proxy_pass
表示將請求傳遞到另外一個服務,類似正向代理,代理到某個服務上,

nginx負載均衡策略

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344173.html

標籤:其他

上一篇:【漏洞修復】Web服務器HTTP設定漏洞

下一篇:【分布式微服務企業快速架構】SpringCloud分布式、微服務、云架構快速開發平臺原始碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more