1. 程式人生 > >Java面試----2018年Nginx常見面試題

Java面試----2018年Nginx常見面試題

1、請解釋一下什麼是Nginx?
答:Nginx是一個web伺服器和反向代理伺服器,用於HTTP、HTTPS、SMTP、POP3和IMAP協議。
2、請列舉Nginx的一些特性?

答:Nginx伺服器的特性包括: 

 1)反向代理/L7負載均衡器 

 2)嵌入式Perl直譯器 

 3)動態二進位制升級 

 4)可用於重新編寫URL,具有非常好的PCRE支援

3、nginx和apache的區別?

答: 

 1)輕量級,同樣起web 服務,比apache 佔用更少的記憶體及資源

 2)抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能

 3)高度模組化的設計,編寫模組相對簡單 

 4)最核心的區別在於apache是同步多程序模型,一個連線對應一個程序;nginx是非同步的,多個連線(萬級別)可以對應一個程序

4.nginx是如何實現高併發的
答:一個主程序,多個工作程序,每個工作程序可以處理多個請求,每進來一個request,會有一個worker程序去處理。但不是全程的處理,處理到可能發生阻塞的地方,比如向上遊(後端)伺服器轉發request,並等待請求返回。那麼,這個處理的worker繼續處理其他請求,而一旦上游伺服器返回了,就會觸發這個事件,worker才會來接手,這個request才會接著往下走。由於web server的工作性質決定了每個request的大部份生命都是在網路傳輸中,實際上花費在server機器上的時間片不多。這是幾個程序就解決高併發的祕密所在。即@skoo所說的webserver剛好屬於網路io密集型應用,不算是計算密集型。
5、請解釋Nginx如何處理HTTP請求。
答:Nginx使用反應器模式。主事件迴圈等待作業系統發出準備事件的訊號,這樣資料就可以從套接字讀取,在該例項中讀取到緩衝區並進行處理。單個執行緒可以提供數萬個併發連線。
6、在Nginx中,如何使用未定義的伺服器名稱來阻止處理請求?

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

 Server { 
     listen 80; server_name “ “ ; 
     return 444;
 }

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

7、 使用“反向代理伺服器”的優點是什麼?
答:反向代理伺服器可以隱藏源伺服器的存在和特徵。它充當網際網路雲和web伺服器之間的中間層。這對於安全方面來說是很好的,特別是當您使用web託管服務時。
8、請列舉Nginx伺服器的最佳用途。
答:Nginx伺服器的最佳用法是在網路上部署動態HTTP內容,使用SCGI、WSGI應用程式伺服器、用於指令碼的FastCGI處理程式。它還可以作為負載均衡器。
9、請解釋Nginx伺服器上的Master和Worker程序分別是什麼?

答: 

 Master程序:讀取及評估配置和維持 

 Worker程序:處理請求

10、請解釋你如何通過不同於80的埠開啟Nginx?

答:為了通過一個不同的埠開啟Nginx,你必須進入/etc/Nginx/sites-enabled/,如果這是預設檔案,那麼你必須開啟名為“default”的檔案。編輯檔案,並放置在你想要的埠:

Like server { 
   listen 81; 
}
11、請解釋是否有可能將Nginx的錯誤替換為502錯誤、503?

答: 502 =錯誤閘道器 503 =伺服器超載 有可能,但是您可以確保fastcgi_intercept_errors被設定為ON,並使用錯誤頁面指令。 

Location / { fastcgi_pass 127.0.01:9001; fastcgi_intercept_errors on; error_page 502 =503/error_page.html; #… }
12、在Nginx中,解釋如何在URL中保留雙斜線?

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

 語法:merge_slashes [on/off] 

 預設值: merge_slashes on 

 環境: http,server

13、請解釋ngx_http_upstream_module的作用是什麼?
答:ngx_http_upstream_module用於定義可通過fastcgi傳遞、proxy傳遞、uwsgi傳遞、memcached傳遞和scgi傳遞指令來引用的伺服器組。
14、請解釋什麼是C10K問題?
答:C10K問題是指無法同時處理大量客戶端(10,000)的網路套接字。
15、請陳述stub_status和sub_filter指令的作用是什麼?

答: 

 1)Stub_status指令:該指令用於瞭解Nginx當前狀態的當前狀態,如當前的活動連線,接受和處理當前讀/寫/等待連線的總數   2)Sub_filter指令:它用於搜尋和替換響應中的內容,並快速修復陳舊的資料

16、解釋Nginx是否支援將請求壓縮到上游?
答:您可以使用Nginx模組gunzip將請求壓縮到上游。gunzip模組是一個過濾器,它可以對不支援“gzip”編碼方法的客戶機或伺服器使用“內容編碼:gzip”來解壓縮響應。
17、解釋如何在Nginx中獲得當前的時間?
答:要獲得Nginx的當前時間,必須使用SSI模組、$date_gmt和$date_local的變數。Proxy_set_header THE-TIME $date_gmt;
18、用Nginx伺服器解釋-s的目的是什麼?
答:用於執行Nginx -s引數的可執行檔案。
19、解釋如何在Nginx伺服器上新增模組?

答:在編譯過程中,必須選擇Nginx模組,因為Nginx不支援模組的執行時間選擇。

注:另有需要JAVA、Android、IOS、Python、C++、HTML5等全套程式設計視訊教程的朋友,請關注微信公眾號trteach圖靈技術社群”獲取資源~~~