從零玩轉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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...