從零玩轉Nginx

来源:https://www.cnblogs.com/Yangbuyi/archive/2023/05/19/17414404.html
-Advertisement-
Play Games

01【熟悉】實際開發中的問題? 現在我們一個項目跑在一個tomcat裡面 當一個tomcat無法支持高的併發量時。可以使用多個tomcat 那麼這多個tomcat如何雲分配請求 |-nginx 02【熟悉】伺服器概述 1,目前常見的web伺服器 1,Apache(http://httpd.apach ...


01【熟悉】實際開發中的問題?

現在我們一個項目跑在一個tomcat裡面

當一個tomcat無法支持高的併發量時。可以使用多個tomcat

那麼這多個tomcat如何雲分配請求

|-nginx

02【熟悉】伺服器概述

1,目前常見的web伺服器

1,Apache(http://httpd.apache.org)

它是世界上用的最多的web伺服器,市場占有率達60%左右,模塊非常豐富,系統非常穩定,可移植性好,但是比較消耗資源

2,lighttpd(http://www.lighttpd.net)

它是德國人開發的一個開源軟體,目標是提供一個高性能的網站,它具有記憶體開銷低,cpu占用低,效能好及模塊豐富,Nginx的重要競爭對手之一

3,tomcat(http://tomcat.apache.org)

是一個開源的軟體,運行servlet+jsp web應用軟體,對靜態文件,高併發的處理能力弱。

4,IBM websphere

它功能完善,開放的Web應用程式伺服器,是IBM電子商務計劃的核心部分,它是基於java的應用環境,範圍從簡單到高級到企業級應用,相於對其它web伺服器來說應該比較少

5,Microsoft IIS

 Microsoft的web伺服器產品為Internet information Server (IIS)  IIS提供了圖形界面管理工具,IIS是一種web伺服器組件,其中有 web伺服器,FTP伺服器,nntp伺服器,smtp伺服器,因為有window2008和2012的支持,所以IIS也有一定的市場

2,各web伺服器占有率

查詢網站

https://news.netcraft.com/archives/2017/10/26/october-2017-web-server-survey-13.html

image-1683991402451

03【熟悉】Nginx概述

1、前言

為毛要用nginx伺服器代理,不直接用tomcat 7.0,還做多了一次接請求?

這個是我想問的,公司的新項目是要用Nginx+tomcat7+jdk開發的,用戶命名可以直接訪問tomcat,為啥還要用Nginx?這貨是個啥玩意?

2、為什麼使用Nginx?

在傳統的Web項目中,併發量小,用戶使用的少。所以在低併發的情況下,用戶可以直接訪問tomcat伺服器,然後tomcat伺服器返回消息給用戶。比如,我們上傳圖片:

image-1683991429126

當然我們知道,為瞭解決併發,可以使用負載均衡:也就是我們多增加幾個tomcat伺服器。當用戶訪問的時候,請求可以提交到空閑的tomcat伺服器上。

image-1683991490460

但是這種情況下可能會有一種這樣的問題:上傳圖片操作。我們把圖片上傳到了tomcat1上了,當我們要訪問這個圖片的時候,tomcat1正好在工作,所以訪問的請求就交給其他的tomcat操作,而tomcat之間的數據沒有進行同步,所以就發生了我們要請求的圖片找不到。

為瞭解決這種情況,我們就想出了分散式。我們專門建立一個圖片伺服器,用來存儲圖片。這樣當我們都把圖片上傳的時候,不管是哪個伺服器接收到圖片,都把圖片上傳到圖片伺服器。

圖片伺服器上需要安裝一個http伺服器,可以使用tomcat、apache、nginx。

image-1683991513898

看到這裡大家可能會問,既然我們要選擇的是http伺服器,為什麼不繼續使用tomcat,而要使用Nginx?

原因如下:nginx常用做靜態內容服務和代理伺服器(不是你FQ那個代理),直面外來請求轉發給後面的應用服務(tomcat,django什麼的),tomcat更多用來做做一個應用容器,讓java web app跑在裡面的東西,對應同級別的有jboss,jetty等東西。

3、什麼是Nginx?

根據前面的對比,我們可以瞭解到Nginx是一個http伺服器。是一個使用c語言開發的高性能的http伺服器及反向代理伺服器。Nginx是一款高性能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發鏈接,並且cpu、記憶體等資源消耗卻非常低,運行非常穩定。

3.1 Nginx的應用場景

1、 http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。

2、 虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。

  • 基於埠的,不同的埠
  • 基於功能變數名稱的,不同功能變數名稱

3、 反向代理,負載均衡。當網站的訪問量達到一定程度後,單台伺服器不能滿足用戶的請求時,需要用多台伺服器集群可以使用nginx做反向代理。並且多台伺服器可以平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閑置的情況。

4、小結

通過瞭解Nginx也算是多了一門技術,而且還是挺簡單的,使用也比較方便。重點是可以給系統帶來很大的性能提升。

04【掌握】在Centos7系統下安裝Nginx

前往下載

http://nginx.org/en/download.html

我是下載了1.16版本的

2,安裝先安裝nginx依賴的包

  • gcc

安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc

yum install gcc-c++

  • PCRE

PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 相容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。

yum install -y pcre pcre-devel

  • zlib

zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。

yum install -y zlib zlib-devel

  • openssl

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。

nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。

yum install -y openssl openssl-devel

4,解壓拷貝

把解壓nginx-1.16.1.tar.gz包

tar -zxvf nginx-1.16.1.tar.gz

修改文件夾的名字

mv nginx-1.16.1 nginx

把nginx拷貝到/usr/local/src裡面

cp -r nginx /usr/local/src

5,安裝

進入nginx的目錄

cd /usr/local/src/nginx

創建nginx的安裝目錄

mkdir /usr/nginx

運行configure

./configure --prefix=/usr/nginx (指定安裝目錄編譯)

./configure --prefix=/usr/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

make編譯

cd /usr/local/src/nginx

make

make install編譯安裝

cd /usr/local/src/nginx

make install

6, Nginx的目錄說明

image-1683993407481

conf 配置目錄 
html靜態文件[cdn加速]
logs日誌目錄
sbin執行文件

7, Nginx的​啟動、停止

啟動

cd /usr/nginx/sbin

./nginx

停止

./nginx -s stop

刷新[當用戶修改了conf/nginx.conf]

./nginx -s reload

05【掌握】反向代理+負載均衡

1.1.正向代理

拿借錢打個比方,A想向C借錢,但是C不認識A所以不借給他,然後A就通過B向C借錢,B借到錢之後再轉交給A,在這個過程中B就扮演了一個正向代理的角色,這個過程中,真正借錢的人是誰,C是不知道的~

我們常說的代理也就是指正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理伺服器代替來請求,科學上罔 xxxxxx 扮演的就是典型的正向代理角色。

比如我想訪問www.google.com,要想翻越這堵牆,你可以在國外用xxxxxx來搭建一臺代理伺服器,代理幫我們請求www.google.com,代理再把請求響應結果再返回給我。

image-1683994885561

1.2.反向代理

還用借錢的例子,A想向C借錢,然後C借給他了,但是實際上這個錢可能C向B借的至於錢到底是誰的,A是不知道的

這裡的C扮演著一個反向代理的角色,客戶不知道真正提供服務的人是誰。

反向代理隱藏了真實的服務端,當我們訪問www.baidu.com的時候,背後可能有成千上萬台伺服器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理伺服器是誰就好了。www.baidu.com就是我們的反向代理伺服器,反向代理伺服器會幫我們把請求轉發到提供真實服務的伺服器那裡去。Nginx就是性能非常好的反向代理伺服器,它可以用來做負載均衡。
image-1683994861724

2,負載均衡

網站的訪問量越來越大,伺服器的服務模式也得進行相應的升級,比如分離出資料庫伺服器、分離出圖片作為單獨服務,這些是簡單的數據的負載均衡,將壓力分散到不同的機器上。有時候來自web前端的壓力,也能讓人十分頭痛。怎樣將同一個功能變數名稱的訪問分散到兩台或更多的機器上呢?這其實就是另一種負載均衡了,nginx自身就可以做到,只需要做個簡單的配置就行。

  nginx不單可以作為強大的web伺服器,也可以作為一個反向代理伺服器,而且nginx還可以按照調度規則實現動態、靜態頁面的分離,可以按照輪詢、ip哈希、URL哈希、權重等多種方式對後端伺服器做負載均衡,同時還支持後端伺服器的健康檢查。

Nginx負載均衡一些基礎知識:

nginx 的 upstream目前支持 4 種方式的分配

1)、輪詢(預設)

  每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2)、weight

  指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。

2)、ip_hash

  每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。

3)、fair(第三方)

  按後端伺服器的響應時間來分配請求,響應時間短的優先分配。

4)、url_hash(第三方)

你的壓力來源於無法自律,只是假裝努力,現狀跟不上內心欲望,所以你焦慮又恐慌。——楊不易
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # SpringBoot實現WebSocket發送接收消息 + Vue實現SocketJs接收發送消息 ### 參考: 1、https://www.mchweb.net/index.php/dev/887.html 2、https://itonline.blog.csdn.net/article/d ...
  • ![01](https://img2023.cnblogs.com/other/2501174/202305/2501174-20230519165542353-407579772.png) > 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬 ...
  • 一、下載ThinkPHP6 在指定目錄(www目錄)下打開cmd,使用composer下載thinkphp6,命令後面的thinkphp6就是下載的目錄名,可以隨意修改。 composer create-project topthink/think thinkphp6 二、目錄結構 下載後,查看目錄 ...
  • hello,大家好啊,我是小樓。 最近在工作中對 Go 的 singleflight 包做了下增強,解決了一個性能問題,這裡記錄下,希望對你也有所幫助。 # singleflight 是什麼 singleflight 直接翻譯為”單(次)飛(行)“,它是對同一種請求的抑制,保證同一時刻相同的請求只有 ...
  • # 基本數據類型和引用數據類型在存儲上的區別 ## 基本數據類型有哪些 | 類型名稱 | 關鍵字 | 占用記憶體 | 取值範圍 | | | | | | | 位元組型 | byte | 1 位元組 | -128~127 | | 短整型 | short | 2 位元組 | -32768~32767 | | 整型 ...
  • **本文將為大家詳細講解Java中的List集合,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題。** **文章較長,乾貨滿滿,建議大家收藏慢慢學習。文末有本文重點總結,主頁有全系列文章分享。技術類問題,歡迎大家和我們一起交流討論! ...
  • ## Lerna 備忘清單 lerna 是一種多包管理工具, 可以讓你在主項目下管理多個子項目,從而解決了多個包互相依賴,且發佈時需要手動維護多個包的問題,每個 package 都有自己的依賴項(package.json),能夠作為獨立的 npm package 發佈,只是源碼放在一起維護,公共包可 ...
  • Less 備忘清單 Less 是一門CSS預處理語言,它擴充了CSS語言,增加了諸如變數、混合(mixin)、函數等功能,讓CSS更易維護、方便製作主題、擴充。Less可以運行在Node.js或瀏覽器端。 Less開發速查清單本備忘單旨在快速理解 Less 所涉及的主要概念,顯示了它的常用方法使用清 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...