面試必備nginx知識梳理(收藏版)

      網(wǎng)友投稿 785 2022-05-29

      Nginx概念

      Nginx 是一個高性能的 HTTP 和反向代理服務(wù)。其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。

      Nginx 專為性能優(yōu)化而開發(fā),性能是其最重要的考量指標(biāo),實現(xiàn)上非常注重效率,能經(jīng)受住高負(fù)載的考驗,有報告表明能支持高達(dá)50000個并發(fā)連接數(shù)。

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

      反向代理

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

      代理

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

      正向代理

      正向代理即是客戶端代理,代理客戶端,服務(wù)端不知道實際發(fā)起請求的客戶端。

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

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

      反向代理

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

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

      是指以代理服務(wù)器來接受 Internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 Internet 上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。

      負(fù)載均衡

      關(guān)于負(fù)載均衡,先來舉個例子:

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

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

      負(fù)載均衡(Load Balance),意思是將負(fù)載(工作任務(wù),訪問請求)進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行。是解決高性能,單點故障(高可用),擴展性(水平伸縮)的終極解決方案。

      Nginx提供的負(fù)載均衡主要有三種方式:輪詢,加權(quán)輪詢,Ip hash。

      輪詢

      nginx默認(rèn)就是輪詢其權(quán)重都默認(rèn)為1,服務(wù)器處理請求的順序:ABCABCABCABC…

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

      加權(quán)輪詢

      根據(jù)配置的權(quán)重的大小而分發(fā)給不同服務(wù)器不同數(shù)量的請求。如果不設(shè)置,則默認(rèn)為1。下面服務(wù)器的請求順序為: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進(jìn)行hash操作,然后根據(jù)hash結(jié)果將同一個客戶端ip的請求分發(fā)給同一臺服務(wù)器進(jìn)行處理,可以解決session不共享的問題。

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

      動靜分離

      動態(tài)與靜態(tài)頁面區(qū)別

      靜態(tài)資源: 當(dāng)用戶多次訪問這個資源,資源的源代碼永遠(yuǎn)不會改變的資源(如:HTML,JavaScript,CSS,img等文件)。

      動態(tài)資源:當(dāng)用戶多次訪問這個資源,資源的源代碼可能會發(fā)送改變(如:.jsp、servlet 等)。

      什么是動靜分離

      動靜分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。

      動靜分離簡單的概括是:動態(tài)文件與靜態(tài)文件的分離。

      為什么要用動靜分離

      為了加快網(wǎng)站的解析速度,可以把動態(tài)資源和靜態(tài)資源用不同的服務(wù)器來解析,加快解析速度。降低單個服務(wù)器的壓力。

      Nginx安裝

      windows下安裝

      1、下載nginx

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

      2、啟動nginx

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

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

      3、檢查nginx是否啟動成功

      直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80 回車,出現(xiàn)以下頁面說明啟動成功!

      Docker安裝nginx

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

      相關(guān)鏈接如下:Docker(三):Docker部署Nginx和Tomcat

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

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

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

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

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

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

      linux下安裝

      1、安裝gcc

      安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:

      yum install gcc-c++

      2、PCRE pcre-devel 安裝

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

      yum install -y pcre pcre-devel

      3、zlib 安裝

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

      yum install -y zlib zlib-devel

      4、OpenSSL 安裝

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

      yum install -y openssl openssl-devel

      5、下載安裝包

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

      下載完畢上傳到服務(wù)器上 /root

      6、解壓

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

      7、配置

      使用默認(rèn)配置,在nginx根目錄下執(zhí)行

      ./configue make make install

      查找安裝路徑: whereis nginx

      8、啟動 nginx

      ./nginx

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

      Nginx常用命令

      注意:使用Nginx操作命令前提,必須進(jìn)入到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進(jìn)程:ps -ef|grep nginx

      Nginx配置文件

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

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

      1、全局塊

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

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

      2、events塊

      events 塊涉及的指令主要影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,比如:worker_connections 1024

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

      3、http塊

      http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80;#監(jiān)聽端口 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 服務(wù)器配置中最頻繁的部分。

      演示示例

      反向代理/負(fù)載均衡

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

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

      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;//輪詢其權(quán)重都默認(rèn)為1 server 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來訪問這兩個項目,我也在項目中打印了日志,操作一下來看看結(jié)果,是不是兩個項目輪詢被訪問。

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

      接下來我們將權(quán)重改為如下設(shè)置:

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

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

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

      結(jié)果顯示,9002端口的訪問次數(shù)與9001訪問的次數(shù)基本上是3:1。

      動靜分離

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

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

      Html文件

      Hello World

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

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

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

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

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

      Nginx工作原理

      mater&worker

      master接收信號后將任務(wù)分配給worker進(jìn)行執(zhí)行,worker可有多個。

      面試必備:nginx知識梳理(收藏版)

      worker如何工作

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

      worker_connection

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

      當(dāng)然了,worker數(shù)也不是越多越好,worker數(shù)和服務(wù)器的CPU數(shù)相等時最適宜的。

      優(yōu)點

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

      總結(jié)

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

      HTTP Nginx 彈性負(fù)載均衡 ELB

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:走近代碼編輯器——CodeMirror
      下一篇:FTP Server程序庫方案探究
      相關(guān)文章
      亚洲妇女熟BBW| 亚洲一区精彩视频| 亚洲国产天堂久久综合| 亚洲av永久无码一区二区三区| 中文字幕在线观看亚洲视频| 亚洲一级毛片视频| 亚洲人成综合在线播放| 亚洲另类图片另类电影| 亚洲a级成人片在线观看| 亚洲AV无码国产精品色| 久久久久精品国产亚洲AV无码| 亚洲一区二区三区在线| 亚洲精品免费网站| 亚洲爆乳大丰满无码专区| 亚洲aⅴ无码专区在线观看春色 | 毛片亚洲AV无码精品国产午夜| 亚洲av永久无码精品秋霞电影秋| 激情无码亚洲一区二区三区| 亚洲成a人片在线观看日本麻豆| 亚洲午夜成人精品电影在线观看| 亚洲午夜激情视频| 情人伊人久久综合亚洲| 亚洲福利在线视频| 亚洲国产精品成人精品软件| 国产成人精品日本亚洲专一区| 亚洲日韩亚洲另类激情文学| 鲁死你资源站亚洲av| 亚洲AV伊人久久青青草原| 亚洲最大av无码网址| 亚洲国产精品久久久天堂| 久久亚洲日韩精品一区二区三区| 亚洲小说区图片区| 亚洲中文无码永久免费| 最新亚洲人成无码网站| 国产91精品一区二区麻豆亚洲| 国产成人亚洲综合色影视| 久久亚洲中文字幕精品有坂深雪| 亚洲1234区乱码| 亚洲Av无码乱码在线观看性色| 伊人亚洲综合青草青草久热| 亚洲国产综合91精品麻豆|