史上最全Nginx面试题及答案
1.Nginx簡介
-
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。
-
其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。
-
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
-
Nginx 是一個很強大的高性能Web和反向代理服務,它具有很多非常優越的特性:
在連接高并發的情況下,Nginx是Apache服務不錯的替代品:Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一。能夠支持高達 50,000 個并發連接數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。
2.正向代理
在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問。
3.反向代理
我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址。
4.負載均衡
單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡。
5.動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度。降低原來單個服務器的壓力。
6.請列舉Nginx的一些特性?
Nginx服務器的特性包括:反向代理/L7負載均衡器 ;嵌入式Perl解釋器 ;動態二進制升級;可用于重新編寫URL,具有非常好的PCRE支持。
7.nginx和apache的區別?
輕量級,同樣起web 服務,比apache 占用更少的內存及資源;抗并發,nginx處理請求是異步非阻塞的,而apache 則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能;高度模塊化的設計,編寫模塊相對簡單;最核心的區別在于apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程。
8.nginx是如何實現高并發的?
一個主進程,多個工作進程,每個工作進程可以處理多個請求,每進來一個request,會有一個worker進程去處理。但不是全程的處理,處理到可能發生阻塞的地方,比如向上游(后端)服務器轉發request,并等待請求返回。那么,這個處理的worker繼續處理其他請求,而一旦上游服務器返回了,就會觸發這個事件,worker才會來接手,這個request才會接著往下走。由于web server的工作性質決定了每個request的大部份生命都是在網絡傳輸中,實際上花費在server機器上的時間片不多。這是幾個進程就解決高并發的秘密所在。即@skoo所說的webserver剛好屬于網絡io密集型應用,不算是計算密集型。
9.Nginx如何處理HTTP請求?
Nginx使用反應器模式。主事件循環等待操作系統發出準備事件的信號,這樣數據就可以從套接字讀取,在該實例中讀取到緩沖區并進行處理。單個線程可以提供數萬個并發連接。
10.為什么要用Nginx?
- 跨平臺、配置簡單
- 非阻塞、高并發連接:
處理2-3萬并發連接數,官方監測能支持5萬并發 - 內存消耗小:
開啟10個nginx才占150M內存,Nginx采取了分階段資源分配技術 - nginx處理靜態文件好,耗費內存少
- 內置的健康檢查功能:
如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上。 - 節省寬帶:
支持GZIP壓縮,可以添加瀏覽器本地緩存 - 穩定性高:
宕機的概率非常小 - master/worker結構:
一個master進程,生成一個或者多個worker進程 - 接收用戶請求是異步的:
瀏覽器將請求發送到nginx服務器,它先將用戶請求全部接收下來,再一次性發送給后端web服務器,極大減輕了web服務器的壓力,一邊接收web服務器的返回數據,一邊發送給瀏覽器客戶端 - 網絡依賴性比較低,只要ping通就可以負載均衡
- 可以有多臺nginx服務器
11.為什么Nginx性能這么高?
得益于它的事件處理機制:
異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決
12.為什么不使用多線程?
Nginx:采用單線程來異步非阻塞處理請求(管理員可以配置Nginx主進程的工作進程的數量),不會為每個請求分配cpu和內存資源,節省了大量資源,同時也減少了大量的CPU的上下文切換,所以才使得Nginx支持更高的并發。
13.在Nginx中如何在URL中保留雙斜線?
要在URL中保留雙斜線,就必須使用merge_slashes_off;語法:merge_slashes [on/off] ; 默認值: merge_slashes on ;環境: http,server
14.ngx_http_upstream_module的作用是什么?
ngx_http_upstream_module用于定義可通過fastcgi傳遞、proxy傳遞、uwsgi傳遞、memcached傳遞和scgi傳遞指令來引用的服務器組。
15.什么是C10K問題?
C10K問題是指無法同時處理大量客戶端(10,000)的網絡套接字。
16.請陳述stub_status和sub_filter指令的作用是什么?
- Stub_status指令:該指令用于了解Nginx當前狀態的當前狀態,如當前的活動連接,接受和處理當前讀/寫/等待連接的總數 ;
- Sub_filter指令:它用于搜索和替換響應中的內容,并快速修復陳舊的數據
17.Nginx是否支持將請求壓縮到上游?
可以使用Nginx模塊gunzip將請求壓縮到上游。gunzip模塊是一個過濾器,它可以對不支持“gzip”編碼方法的客戶機或服務器使用“內容編碼:gzip”來解壓縮響應。
18.解釋如何在Nginx中獲得當前的時間?
要獲得Nginx的當前時間,必須使用SSI模塊、dategmt和date_gmt和dateg?mt和date_local的變量。Proxy_set_header THE-TIME $date_gmt;
19.用Nginx服務器解釋-s的目的是什么?
用于運行Nginx -s參數的可執行文件。
20.解釋如何在Nginx服務器上添加模塊?
在編譯過程中,必須選擇Nginx模塊,因為Nginx不支持模塊的運行時間選擇。
21.列舉Nginx服務器的最佳用途。
Nginx服務器的最佳用法是在網絡上部署動態HTTP內容,使用SCGI、WSGI應用程序服務器、用于腳本的FastCGI處理程序。它還可以作為負載均衡器。
22.Nginx服務器上的Master和Worker進程分別是什么?
- Master進程:讀取及評估配置和維持 ;
- Worker進程:處理請求。
總結
以上是生活随笔為你收集整理的史上最全Nginx面试题及答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画端午节_我想带你去旅行,我
- 下一篇: html地图缩放比例,百度地图之添加控件