Nginx 面試中最常見的 18 道題

2022-01-12 Java基基

Nginx的並發能力在同類型網頁伺服器中的表現,相對而言是比較好的,因此受到了很多企業的青睞,我國使用Nginx網站的知名用戶包括騰訊、淘寶、百度、京東、新浪、網易等等。Nginx是網頁伺服器運維人員必備技能之一,下面為大家整理了一些比較常見的Nginx相關面試題,僅供參考:

Nginx---Ngine X,是一款免費的、自由的、開源的、高性能HTTP伺服器和反向代理伺服器;也是一個IMAP、POP3、SMTP代理伺服器;Nginx以其高性能、穩定性、豐富的功能、簡單的配置和低資源消耗而聞名。

也就是說Nginx本身就可以託管網站(類似於Tomcat一樣),進行Http服務處理,也可以作為反向代理伺服器 、負載均衡器和HTTP緩存。

Nginx 解決了伺服器的C10K(就是在一秒之內連接客戶端的數目為10k即1萬)問題。它的設計不像傳統的伺服器那樣使用線程處理請求,而是一個更加高級的機制—事件驅動機制,是一種異步事件驅動結構。

推薦下自己做的 Spring Boot 的實戰項目:

https://github.com/YunaiV/ruoyi-vue-pro

跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。非阻塞、高並發連接:數據複製時,磁碟I/O的第一階段是非阻塞的。官方測試能支持5萬並發連接,實際生產中能跑2~3萬並發連接數(得益於Nginx採用了最新的epoll事件處理模型(消息隊列)。Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到後端Web伺服器,極大減輕後端Web伺服器的壓力。發送響應報文時,是邊接收來自後端Web伺服器的數據,邊發送給客戶端。網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。支持內置伺服器檢測。Nginx能夠根據應用伺服器處理頁面返回的狀態碼、超時信息等檢測伺服器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上。此外還有內存消耗小、成本低廉(比F5硬體負載均衡器廉價太多)、節省帶寬、穩定性高等特點。

推薦下自己做的 Spring Cloud 的實戰項目:

https://github.com/YunaiV/onemall

圖片

Nginx 是一個高性能的 Web 伺服器,能夠同時處理大量的並發請求。它結合多進程機制和異步機制 ,異步機制使用的是異步非阻塞方式 ,接下來就給大家介紹一下 Nginx 的多線程機制和異步非阻塞機制 。

1、多進程機制

伺服器每當收到一個客戶端時,就有 伺服器主進程 ( master process )生成一個 子進程( worker process )出來和客戶端建立連接進行交互,直到連接斷開,該子進程就結束了。

使用進程的好處是各個進程之間相互獨立,不需要加鎖,減少了使用鎖對性能造成影響,同時降低編程的複雜度,降低開發成本。其次,採用獨立的進程,可以讓進程互相之間不會影響 ,如果一個進程發生異常退出時,其它進程正常工作, master 進程則很快啟動新的 worker 進程,確保服務不會中斷,從而將風險降到最低。

缺點是作業系統生成一個子進程需要進行 內存複製等操作,在資源和時間上會產生一定的開銷。當有大量請求時,會導致系統性能下降 。

2、異步非阻塞機制

每個工作進程 使用 異步非阻塞方式 ,可以處理 多個客戶端請求 。

當某個 工作進程 接收到客戶端的請求以後,調用 IO 進行處理,如果不能立即得到結果,就去 處理其他請求 (即為 非阻塞 );而 客戶端 在此期間也 無需等待響應 ,可以去處理其他事情(即為 異步 )。

當 IO 返回時,就會通知此 工作進程 ;該進程得到通知,暫時 掛起 當前處理的事務去 響應客戶端請求 。

只需將請求刪除的伺服器就可以定義為:

圖片

這裡,伺服器名被保留為一個空字符串,它將在沒有「主機」頭欄位的情況下匹配請求,而一個特殊的Nginx的非標準代碼444被返回,從而終止連接。

反向代理伺服器可以隱藏源伺服器的存在和特徵。它充當網際網路雲和web伺服器之間的中間層。這對於安全方面來說是很好的,特別是當您使用web託管服務時。

Nginx伺服器的最佳用法是在網絡上部署動態HTTP內容,使用SCGI、WSGI應用程式伺服器、用於腳本的FastCGI處理程序。它還可以作為負載均衡器。

主程序 Master process 啟動後,通過一個 for 循環來 接收 和 處理外部信號 ;主進程通過 fork() 函數產生 worker 子進程 ,每個子進程執行一個 for循環來實現Nginx伺服器對事件的接收和處理 。圖片

一般推薦 worker 進程數與CPU內核數一致,這樣一來不存在大量的子進程生成和管理任務,避免了進程之間競爭CPU 資源和進程切換的開銷。而且 Nginx 為了更好的利用 多核特性 ,提供了 CPU 親緣性的綁定選項,我們可以將某一個進程綁定在某一個核上,這樣就不會因為進程的切換帶來 Cache 的失效。

對於每個請求,有且只有一個工作進程 對其處理。首先,每個 worker 進程都是從 master進程 fork 過來。在 master 進程裡面,先建立好需要 listen 的 socket(listenfd) 之後,然後再 fork 出多個 worker 進程。

所有 worker 進程的 listenfd 會在新連接到來時變得可讀 ,為保證只有一個進程處理該連接,所有 worker 進程在註冊 listenfd 讀事件前搶佔 accept_mutex ,搶到互斥鎖的那個進程註冊 listenfd 讀事件 ,在讀事件裡調用 accept 接受該連接。

當一個 worker 進程在 accept 這個連接之後,就開始讀取請求、解析請求、處理請求,產生數據後,再返回給客戶端 ,最後才斷開連接。這樣一個完整的請求就是這樣的了。我們可以看到,一個請求,完全由 worker 進程來處理,而且只在一個 worker 進程中處理。

圖片

在 Nginx 伺服器的運行過程中, 主進程和工作進程 需要進程交互。交互依賴於 Socket 實現的管道來實現。

首先,代理伺服器一般指區域網內部的機器通過代理伺服器發送請求到網際網路上的伺服器,代理伺服器一般作用在客戶端。例如:GoAgent翻牆軟體。我們的客戶端在進行翻牆操作的時候,我們使用的正是正向代理,通過正向代理的方式,在我們的客戶端運行一個軟體,將我們的HTTP請求轉發到其他不同的伺服器端,實現請求的分發。

圖片

反向代理伺服器作用在伺服器端,它在伺服器端接收客戶端的請求,然後將請求分發給具體的伺服器進行處理,然後再將伺服器的相應結果反饋給客戶端。Nginx就是一個反向代理伺服器軟體。

圖片

從上圖可以看出:客戶端必須設置正向代理伺服器,當然前提是要知道正向代理伺服器的IP位址,還有代理程序的埠。反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。

圖片

502 =錯誤網關

503 =伺服器超載

有可能,但是您可以確保fastcgi_intercept_errors被設置為ON,並使用錯誤頁面指令。

圖片

要在URL中保留雙斜線,就必須使用merge_slashes_off;

語法:merge_slashes [on/off]

默認值: merge_slashes on

環境: http,server

ngx_http_upstream_module用於定義可通過fastcgi傳遞、proxy傳遞、uwsgi傳遞、memcached傳遞和scgi傳遞指令來引用的伺服器組。

C10K問題是指無法同時處理大量客戶端(10,000)的網絡套接字。

Stub_status指令:該指令用於了解Nginx當前狀態的當前狀態,如當前的活動連接,接受和處理當前讀/寫/等待連接的總數;

Sub_filter指令:它用於搜索和替換響應中的內容,並快速修復陳舊的數據;

您可以使用Nginx模塊gunzip將請求壓縮到上遊。gunzip模塊是一個過濾器,它可以對不支持「gzip」編碼方法的客戶機或伺服器使用「內容編碼:gzip」來解壓縮響應。

要獲得Nginx的當前時間,必須使用SSI模塊、

Proxy_set_header THE-TIME $date_gmt;

用於運行Nginx -s參數的可執行文件。

在編譯過程中,必須選擇Nginx模塊,因為Nginx不支持模塊的運行時間選擇。

- END -

相關焦點

  • Nginx面試中最常見的18道題 抱佛腳必備
    【IT168 編譯】Nginx的並發能力在同類型網頁伺服器中的表現,相對而言是比較好的,因此受到了很多企業的青睞,我國使用Nginx網站的知名用戶包括騰訊、淘寶、百度、京東、新浪、網易等等。
  • 五個常見的Nginx配置錯誤
    Nginx 是最常見的 Web 伺服器。本文介紹五個常見的配置錯誤,它們會降低網站的安全性。
  • 長達兩個月的面經,50道python開發常見基礎面試題!
    轉眼已經5月份,學員們經過三金四銀求職季積累了大量的面經,在小U的反覆催促下終於讓python將這兩個月面試常見題整理下來,不要以為你記憶力很好,這道題太奇葩了你絕對不會忘,事實證明記憶力是靠不住,話不多說來看看學員們整理的python面試題!小U 還會不斷催促學員們將新遇到的問題記錄下來。
  • 面試珍藏:最常見的200多道Java面試題(2019年最新版)
    ,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。原因二:節省招聘雙方彼此的時間,有些來公司面試人,無論是有幾年工作經驗的還是剛畢業的,就連這些最基礎的面試題都搞不定,這確實讓人很遺憾。常言道「一屋不掃何以掃天下」,也是同樣的道理,如果連基礎的概念都搞不明白,又怎麼讓面試官相信你能寫出高質量的程序呢?與其浪費彼此的時間,還不如花點時間把自己的基礎知識掌握牢固。
  • 如何在項目中使用Http2.0?
    •第 20 題:【每日一題】(20題)面試官問:談談JS中的 webSockets 的理解?•第 19 題:【每日一題】面試官問:談談JS中的 XMLHttpRequest 對象的理解?•第 18 題:【每日一題】面試官問:JS中的 Ajax 跨域與擴展 Comet ?•第 17 題:【每日一題】(17題)面試官問:JS中事件流,事件處理程序,事件對象的理解?
  • 【前端面試題】—53道常見NodeJS基礎面試題(附答案)
    npm是 Node. js中管理和分發包的工具,可用於安裝、卸載、發布、查看包等。通過ηpm,可以安裝和管理項目的依賴,還可以指明依賴項的具體版本號。20、Node. js中導入模塊和導入 JavaScript文件在寫法上有什麼區別?
  • 面試中常見的智力題(一)
    《Java面試必知必會》系列繼續更新了,本次主要分享面試中的智力題,該考點也是在面試中面試官可能會提問的環節,一般這種智力題網上都有一些答案,這裡給出一些常出現的智力題。這個一般是考察你思考問題的能力,一般這種題在短時間內,要快速的找到思路,然後給面試官講解你的思路,今天簡單分享一些在面試中常常出現的問題。
  • Java 500 道核心面試題全解析
    經過反覆驗證,結合自己 4 年多作為面試官的經歷,把這些內容整理成文,用大約 10 萬字的內容對 Java 的核心知識點和常見的 500 多道面試題,做了詳細的介紹,也就是本專欄中你所看到的全部內容。因為它能為你贏得面試的主動權,讓你獲得更多的 Offer。1. 500+ 面試題詳解如果你是還沒走入職場的新人,我會為你提供完整的 Java 技術棧講解,以及 最新、最全、最實用的 500 多道 Java 面試題詳解。
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • k8s之nginx-Ingress-controller如何做高可用應對大並發請求?
    背景分析:有一個業務應用部署在kubernetes中,
  • 幾道常見的SQL面試題,看你能答對幾道?
    點擊關註上方「SQL資料庫開發」,設為「置頂或星標」,第一時間送達乾貨收集了幾道比較常見的SQL面試題,在不看底部參考答案的情況下,看自己能做對幾道。4.請用SQL  語句實現:從TestDB 數據表中查詢出所有月份的發生額都比101 科目相應月份的發生額高的科目。請注意:TestDB 中有很多科目,都有1 -12 月份的發生額。AccID :科目代碼,Occmonth :發生額月份,DebitOccur :發生額。
  • 500道Java 必備面試題答案(過後即刪)
    500+ 面試題詳解如果你是還沒走入職場的新人,我會為你提供完整的 Java 技術棧講解,以及 最新、最全、最實用的 500 多道 Java 面試題詳解。有最常見的 String 面試題從表象到原理的深入講解;還有 Java 8 中新特性的介紹,比如時間和日期模塊,讓你使用更簡潔和優化的方式寫出更完美的代碼;還有我們日常用的很多包裝類不為人知的有趣現象和知識盲點介紹;還有數組以及算法的介紹,雖然基礎但容易被面試者忽略和容易出錯的問題……第二部分:各種類和克隆這部分包含 4 篇文章,除了會深入講解 Java
  • 75道常見AI面試題,看看你的知識盲點在哪?(附解析)
    之前我們給大家推薦了一份 Python 面試寶典,收藏了近 300 道面試題,今天為為家精心準備了一份 AI相關崗位的面試題,幫大家掃清知識盲點,自信上場!機器學習工程師面試1、你會在時間序列數據集上使用什麼交叉驗證技術?是用k倍或LOOCV?2、你是怎麼理解偏差方差的平衡的?
  • 數據分析師面試最常見的十道面試題分享!
    以下是容大教育小編日常整理的數據分析師面試時經常遇到的十道數據分析面試題,下面讓我們一起看看數據分析師面試最常見的十道面試題:1、海量日誌數據,提取出某日訪問百度次數最多的那個IP首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大文件中。
  • 教師資格面試常見的面試官提問問題(60道)
    教師資格面試常見的面試官提問問題(60道) http://www.hteacher.net 2015-11-18 17:12 中國教師資格網 [您的教師考試網]
  • Python 爬蟲面試題 170 道
    最近在刷面試題,所以需要看大量的 Python 相關的面試題,從大量的題目中總結了很多的知識,同時也對一些題目進行拓展了,但是在看了網上的大部分面試題都有這幾個問題:有些部分還是 Python2 的代碼回答的很簡單,關鍵的題目沒有點出為什麼
  • 求職百科 | 這4道面試題真的太太太奇葩了!
    如果我告訴你,這還是一道面試題,你會作何感想?你沒聽錯,這真是一道面試題。前陣子,一位留學生小夥伴就在面試中遇到了這道問題,當時小夥伴就有點懵了,甚至腦補面試官是不是有啥特殊癖好…遇到這種問題,小夥伴一定要鎮定。這種和常規行為面試題不太一樣的問題,小編稱之為「奇葩面試題」(好隨意的命名啊哈哈。
  • leetcode 刷500道題,筆試/面試穩嗎?
    而在筆試中是完全不一樣的,在筆試中,大部分題目都是情景題,可能讀懂個題目都需要花不少時間,偶爾還會遇到不大知道題目要我們幹嘛,而且有時間限制,估計每道題給你分配的時間是 30 分鐘。有,例如剛才是求最大和,現在我改成求最大乘積。我舉上面這些例子,就是想告訴你,對於前期的學習,我建議分類刷題,總結題型,像我上面舉的這些例子,在筆試/面試中還是比較常見的,如果你懂得對應的方法,就可以秒殺了,因為這類題,沒啥邊界或者規律。
  • 2020河北省考面試幾道題
    2020河北省考面試幾道題?2020河北省考查詢入口已經開放,現在面試無疑牽動著每一名考生的心,已經有很多考生詢問面試相關問題,為了幫助各位考生備考面試,衡水人事考試網特整理河北公務員面試相關資訊,供各位考生參考。
  • LeetCode 最經典的 100 道題
    我給他的建議是一邊參加秋招一邊刷題,目前秋招還沒有結束,專心複習還來得及。我發現找工作真是越來越卷了,我上大學的時候,聽學長說刷 200 道題就很強了,很多人只刷了幾十道題就找到工作了。而現在,算法題已經被吹上天,讓人覺得不刷夠 400 道題,都不好意思參加面試了。