nginx的知識面試易考點

Nginx概念

Nginx 是一個高性能的 HTTP 和反向代理服務。其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好。

Nginx 專為性能優化而開發,性能是其最重要的考量指標,實現上非常注重效率,能經受住高負載的考驗,有報告表明能支持高達50000個并發連接數。

在連接高并發的情況下,Nginx 是 Apache 服務不錯的替代品:Nginx 在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一。

反向代理

在說反向代理之前,先來說說什么是代理和正向代理。

代理

代理其實就是一個中介,A和B本來可以直連,中間插入一個C,C就是中介。剛開始的時候,代理多數是幫助內網client(局域網)訪問外網server用的。 后來出現了反向代理,反向這個詞在這兒的意思其實是指方向相反,即代理將來自外網客戶端的請求轉發到內網服務器,從外到內。

正向代理

正向代理即是客戶端代理,代理客戶端,服務端不知道實際發起請求的客戶端。

正向代理類似一個跳板機,代理訪問外部資源。

比如我們國內訪問谷歌,直接訪問訪問不到,我們可以通過一個正向代理服務器,請求發到代理服服務上,代理服務器能夠訪問谷歌,這樣由代理去訪問谷歌取到返回數據,再返回給我們,這樣我們就能訪問谷歌了。

反向代理

反向代理即是服務端代理,代理服務端,客戶端不知道實際提供服務的服務端。

客戶端是感知不到代理服務器的存在。

是指以代理服務器來接受 Internet 上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。

負載均衡

關于負載均衡,先來舉個例子:

地鐵大家應該都坐過吧,我們一般在早高峰乘地鐵時候,總有那么一個地鐵口人最擁擠,這時候,一般會有個地鐵工作人員A拿個大喇叭在喊“著急的人員請走B口,B口人少車空”。而這個地鐵工作人員A就是負責負載均衡的。

為了提升網站的各方面能力,我們一般會把多臺機器組成一個集群對外提供服務。然而,我們的網站對外提供的訪問入口都是一個的,比如www.taobao.com。那么當用戶在瀏覽器輸入www.taobao.com的時候如何將用戶的請求分發到集群中不同的機器上呢,這就是負載均衡在做的事情。

負載均衡(Load Balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(服務器,組件)上進行執行。是解決高性能,單點故障(高可用),擴展性(水平伸縮)的終極解決方案。

Nginx提供的負載均衡主要有三種方式:輪詢,加權輪詢,Ip hash。

輪詢

nginx默認就是輪詢其權重都默認為1,服務器處理請求的順序:ABCABCABCABC…

upstream mysvr { server 192.168.8.1:7070; server 192.168.8.2:7071;server 192.168.8.3:7072;
}

加權輪詢

根據配置的權重的大小而分發給不同服務器不同數量的請求。如果不設置,則默認為1。下面服務器的請求順序為:ABBCCCABBCCC…

upstream mysvr { server 192.168.8.1:7070 weight=1; server 192.168.8.2:7071 weight=2;server 192.168.8.3:7072 weight=3;
}

ip_hash

iphash對客戶端請求的ip進行hash操作,然后根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,可以解決session不共享的問題。

upstream mysvr { server 192.168.8.1:7070; server 192.168.8.2:7071;server 192.168.8.3:7072;ip_hash;
}

動靜分離

動態與靜態頁面區別

  • 靜態資源: 當用戶多次訪問這個資源,資源的源代碼永遠不會改變的資源(如:HTML,JavaScript,CSS,img等文件)。
  • 動態資源:當用戶多次訪問這個資源,資源的源代碼可能會發送改變(如:.jsp、servlet 等)。

什么是動靜分離

  • 動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。

  • 動靜分離簡單的概括是:動態文件與靜態文件的分離。

為什么要用動靜分離

為了加快網站的解析速度,可以把動態資源和靜態資源用不同的服務器來解析,加快解析速度。降低單個服務器的壓力。

Nginx安裝

windows下安裝

1、下載nginx

nginx.org/en/download…?下載穩定版本。以nginx/Windows-1.20.1為例,直接下載 nginx-1.20.1.zip。 下載后解壓,解壓后如下:

2、啟動nginx

  • 直接雙擊nginx.exe,雙擊后一個黑色的彈窗一閃而過

  • 打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令?nginx.exe?,回車即可

3、檢查nginx是否啟動成功

直接在瀏覽器地址欄輸入網址?http://localhost:80?回車,出現以下頁面說明啟動成功!

Docker安裝nginx

我之前的文章也講過Linux下安裝的步驟,我采用的是docker安裝的,很簡單。

1、查看所有本地的主機上的鏡像,使用命令docker images

2、創建 nginx 容器 并啟動容器,使用命令docker run -d --name nginx01 -p 3344:80 nginx

3、查看已啟動的容器,使用命令docker ps

[圖片上傳失敗…(image-af849a-1631168446877)]

瀏覽器訪問服務器ip:3344,如下,說明安裝啟動成功。

注意:如何連接不上,檢查阿里云安全組是否開放端口,或者服務器防火墻是否開放端口!

linux下安裝

1、安裝gcc

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

yum install gcc-c++

2、PCRE pcre-devel 安裝

PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。命令:

yum install -y pcre pcre-devel

3、zlib 安裝

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

yum install -y zlib zlib-devel

4、OpenSSL 安裝

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議,并提供豐富的應用程序供測試或其它目的使用。 nginx 不僅支持 http 協議,還支持 https(即在ssl協議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。

yum install -y openssl openssl-devel

5、下載安裝包

手動下載.tar.gz安裝包,地址:nginx.org/en/download…

下載完畢上傳到服務器上 /root

6、解壓

tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1

7、配置

使用默認配置,在nginx根目錄下執行

./configue
make
make install

查找安裝路徑:?whereis nginx

8、啟動 nginx

./nginx

啟動成功,訪問頁面:ip:80

Nginx常用命令

注意:使用Nginx操作命令前提,必須進入到Nginx目錄?/usr/local/nginx/sbin

1、查看Nginx版本號:./nginx -v

2、啟動 Nginx:./nginx

3、停止 Nginx:./nginx -s stop?或者./nginx -s quit

4、重新加載配置文件:./nginx -s reload

5、查看nginx進程:ps -ef|grep nginx

Nginx配置文件

Nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf

Nginx配置文件有3部分組成:

1、全局塊

從配置文件開始到 events 塊之間的內容,主要會設置一些影響 nginx 服務器整體運行的配置指令,比如:worker_processes 1

這是 Nginx 服務器并發處理服務的關鍵配置,worker_processes 值越大,可以支持的并發處理量也越多,但是會受到硬件、軟件等設備的制約。一般設置值和CPU核心數一致。

2、events塊

events 塊涉及的指令主要影響 Nginx 服務器與用戶的網絡連接,比如:worker_connections 1024

表示每個 work process 支持的最大連接數為 1024,這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。

3、http塊

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;#監聽端口server_name  localhost;#域名location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

這算是 Nginx 服務器配置中最頻繁的部分。

演示示例

反向代理/負載均衡

我們在windows下演示,首先我們創建兩個springboot項目,端口是9001和9002,如下:

我們要做的就是將localhost:80代理localhost:9001localhost:9002這兩個服務,并且讓輪詢訪問這兩個服務。

nginx配置如下:

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream jiangwang {server 127.0.0.1:9001 weight=1;//輪詢其權重都默認為1server 127.0.0.1:9002 weight=1;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;proxy_pass http://jiangwang;}}}

我們先將項目打成jar包,然后命令行啟動項目,然后在瀏覽器上訪問localhost來訪問這兩個項目,我也在項目中打印了日志,操作一下來看看結果,是不是兩個項目輪詢被訪問。

可以看到,訪問localhost,這兩個項目輪詢被訪問。

接下來我們將權重改為如下設置:

upstream jiangwang {server 127.0.0.1:9001 weight=1;server 127.0.0.1:9002 weight=3;
}

重新加載一個nginx的配置文件:nginx -s reload

加載完畢,我們再訪問其localhost,觀察其訪問的比例:

結果顯示,9002端口的訪問次數與9001訪問的次數基本上是3:1

動靜分離

1、將靜態資源放入本地新建的文件里面,例如:在D盤新建一個文件data,然后再data文件夾里面在新建兩個文件夾,一個img文件夾,存放圖片;一個html文件夾,存放html文件;如下圖:

2、在html文件夾里面新建一個a.html文件,內容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Html文件</title>
</head>
<body><p>Hello World</p>
</body>
</html>

3、在img文件夾里面放入一張照片,如下:

4、配置nginx中nginx.conf文件:

location /html/ {root   D:/data/;index  index.html index.htm;
}location /img/ {root   D:/data/;autoindex on;#表示列出當前文件夾中的所有內容
}

5、啟動nginx,訪問其文件路徑,在瀏覽器輸入http://localhost/html/a.html,如下:

6、在瀏覽器輸入http://localhost/img/

Nginx工作原理

mater&worker

master接收信號后將任務分配給worker進行執行,worker可有多個。

worker如何工作

客戶端發送一個請求到master后,worker獲取任務的機制不是直接分配也不是輪詢,而是一種爭搶的機制,“搶”到任務后再執行任務,即選擇目標服務器tomcat等,然后返回結果。

worker_connection

普通的靜態訪問最大并發數是:worker_connections * worker_processes/ 2?;若是 HTTP 作為反向代理來說,最大并發數量應該是?worker_connections * worker_processes/ 4?,因為作為反向代理服務器,每個并發會建立與客戶端的連接和后端服務器的連接,會占用兩個連接。

當然了,worker數也不是越多越好,worker數和服務器的CPU數相等時最適宜的。

優點

可以使用?nginx –s reload?熱部署,利用 nginx 進行熱部署操作每個 woker 是獨立的進程,若其中一個woker出現問題,其他繼續進行爭搶,實現請求過程,不會造成服務中斷。

總結

關于 Nginx 的基本概念、安裝教程、配置、使用實例以及工作原理,本文都做了詳細闡述。希望本文對你有所幫助。

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

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

相關文章

C#用鏈表和數組分別實現堆棧

1.鏈表 實現棧的四個基本功能 入棧 出棧 長度 棧頂值 public class 基礎 : MonoBehaviour {public class MyStack{//定義每一個元素的數據結構 //下一個元素 和 該元素的值public class StackData{public StackData next;public object data;public StackData(StackData next,…

linux驅動編程 - kfifo先進先出隊列

簡介&#xff1a; kfifo是Linux Kernel里面的一個 FIFO&#xff08;先進先出&#xff09;數據結構&#xff0c;它采用環形循環隊列的數據結構來實現&#xff0c;提供一個無邊界的字節流服務&#xff0c;并且使用并行無鎖編程技術&#xff0c;即當它用于只有一個入隊線程和一個出…

nginx修改網站默認根目錄及發布(linux、centos、ubuntu)openEuler軟件源repo站點

目錄 安裝nginx配置nginx其它權限配置 安裝nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下輸入:set nu或:set number可以顯示行號 復制如下內容&#xff1a; server {listen 80;server_name…

【0294】Postgres內核 dynahash 之 hash_search 實現原理

相關文章: 【0289】Postgres內核之哈希表(Hash Tables) 【0290】Postgres內核之dynahash(動態哈希表,dynamic hash tables)(概念篇) 【0291】Postgres內核之dynahash table 創建 【0292】Postgres內核源碼之dynahash 插入entry實現 【0293】Postgres內核之創建 dynahas…

ESP32 通過藍牙顯示歌詞代碼示例

通過藍牙協議播放音樂&#xff0c;有的時候需要顯示歌詞&#xff0c;這里就是a2dp庫獲取了歌詞 值得注意的是要想正確獲取到歌詞&#xff0c;必須打開各種播放器的字幕&#xff08;歌詞&#xff09;開關 本項目用了三個開源庫 a2dp&#xff0c;tft_espi,xfont. a2dp &#x…

基于python實現的監聽服務接口是否正常,發送異常消息到釘釘群

獲取釘釘機器人 創建釘釘群組(要求至少三個成員)進入群組 設置>機器人>添加機器人選擇自定義機器人 按照要求填寫完獲取到 Webhook的鏈接 實現代碼 from time import sleep import requests import json from datetime import datetime import logging# 配置日志記錄的…

數據結構第11節: B樹

B樹是一種自平衡的樹數據結構&#xff0c;它能夠保持數據排序&#xff0c;并且在插入、刪除和查找操作中具有對數時間復雜度。B樹廣泛應用于文件系統、數據庫和索引中&#xff0c;因為它們可以有效地處理大量數據。 B樹的特點&#xff1a; 所有葉子節點都位于同一層。每個節點…

【】AI八股-神經網絡相關

Deep-Learning-Interview-Book/docs/深度學習.md at master amusi/Deep-Learning-Interview-Book GitHub 網上相關總結&#xff1a; 小菜雞寫一寫基礎深度學習的問題&#xff08;復制大佬的&#xff0c;自己復習用&#xff09; - 知乎 (zhihu.com) CV面試問題準備持續更新貼 …

.net 調用海康SDK的跨平臺解決方案

??歡迎點贊 :?? 收藏 ?留言 ?? 如有錯誤敬請指正,賜人玫瑰,手留余香!??本文作者:由webmote 原創??作者格言:新的征程,我們面對的不僅僅是技術還有人心,人心不可測,海水不可量,唯有技術,才是深沉黑夜中的一座閃爍的燈塔序言 上2篇海康SDK使用以及常見的坑…

PCL 點云PFH特征描述子

點云PFH特征描述子 一、概述1.1 概念1.2 算法原理一、代碼實現二、結果示例一、概述 1.1 概念 點特征直方圖PFH(Point Feature Histograms)描述子:用于表示點云中每個點的局部幾何形狀信息,它是一種直方圖描述子,包括了點云的法線方向和曲率信息,PFH描述子可以幫助區分不同…

深入Django(八)

掌握Django的管理后臺 引言 在前七天的教程中&#xff0c;我們介紹了Django的基礎架構、模型、視圖、模板、URL路由、表單系統以及數據庫遷移。今天&#xff0c;我們將深入了解Django的管理后臺&#xff0c;這是一個功能強大的內置管理界面&#xff0c;用于創建、更新、查看和…

【JavaEE精煉寶庫】文件操作(1)——基本知識 | 操作文件——打開實用性編程的大門

目錄 一、文件的基本知識1.1 文件的基本概念&#xff1a;1.2 樹型結構組織和目錄&#xff1a;1.3 文件路徑&#xff08;Path&#xff09;&#xff1a;1.4 二進制文件 VS 文本文件&#xff1a;1.5 其它&#xff1a; 二、Java 操作文件2.1 方法說明&#xff1a;2.2 使用演示&…

QT面試筆記總計

一 Qt 保證多線程安全? 使互斥鎖保證多線程安全性。QMutex類、。使用讀寫鎖保證多線程安全性&#xff0c;QReadWriteLock。使用信號和槽機制保證多線程安全性。使用顯示切換保證多線程安全性。QTread類。 Qt 中的事件與信號的區別? 事件與信號的實現機制不同&#xff1b;事…

HCIA綜合實驗

學習新思想&#xff0c;爭做新青年。今天學習的是HCIA綜合實驗&#xff01; 實驗拓撲 實驗需求 總部&#xff1a; 1、除了SW8 SW9是三層交換機&#xff0c;其他交換機均為2層交換機。 2、GW為總部的出口設備&#xff0c;使用單臂路由技術&#xff0c;VLAN10,20,100的網關都在GW…

ERROR: “armeabi-v7a“ not supported for HarmonyOS

IDE 從 devecostudio-mac-4.1.3.700 升級至 devecostudio-mac-5.0.3.403 后拋出了如下異常: ERROR: "armeabi-v7a" not supported for HarmonyOS. 解決辦法 一.entry/build-profile.json5 需 entry/build-profile.json5 的 abiFilters 中移除 "armeabi-v7a&qu…

計算機網絡體系結構詳解:協議與分層

在學習計算機網絡時&#xff0c;理解網絡協議與分層體系結構是至關重要的。本文將詳細介紹這些概念&#xff0c;幫助基礎小白快速入門。 1. 什么是網絡協議 網絡協議是計算機網絡中用于數據交換的規則和標準。這些規則規定了數據格式、時序以及發送和接收數據時的動作。網絡協…

Unity3D瓦片地圖輔助定位工具

介紹 該工具用于TileMap的瓦片輔助定位&#xff0c;通過鍵盤或鼠標按瓦片尺寸0到1的比例作為單次移動值移動定位點游戲對象。當采用定位點游戲對象映射瓦片時&#xff0c;可使用該工具來移動定位點游戲對象&#xff0c;在新版本Unity3D的TileMap編輯器中可使用GameObject Brush…

基于java+springboot+vue實現的流浪動物管理系統(文末源碼+Lw)277

摘 要 在如今社會上&#xff0c;關于信息上面的處理&#xff0c;沒有任何一個企業或者個人會忽視&#xff0c;如何讓信息急速傳遞&#xff0c;并且歸檔儲存查詢&#xff0c;采用之前的紙張記錄模式已經不符合當前使用要求了。所以&#xff0c;對流浪動物信息管理的提升&…

【React】React18 Hooks之useState

目錄 useState案例1&#xff08;直接修改狀態&#xff09;案例2&#xff08;函數式更新&#xff09;案例3&#xff08;受控表單綁定&#xff09;注意事項1&#xff1a;set函數不會改變正在運行的代碼的狀態注意事項2&#xff1a;set函數自動批量處理注意事項3&#xff1a;在下次…

實現基于Spring Security的權限管理系統

實現基于Spring Security的權限管理系統 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代Web應用中&#xff0c;權限管理系統是至關重要的組成部分。通過…