Java面試,Nginx問了16個問題,我...

作爲一個後端程序員,Nginx也是必備技能之一哦,作爲一個web服務器,Nginx的性能方面是很不錯的。本文總結或16個知識點,或者面試題分享給大家,後續還會繼續更新⛽️。

1.什麼是nginx?

Nginx是一個高性能的HTTP和反向代理服務器。同時也是一個 IMAP/POP3/SMTP 代理服務器。 官方網站:http://nginx.org。

2.nginx主要特徵?

處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝. 無緩存的反向代理加速,簡單的負載均衡和容錯. FastCGI,簡單的負載均衡和容錯.模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等filter。如果由 FastCGI 或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以並行 運行,而不需要相互等待。

支持 SSL 和 TLSSNI.

Nginx 它支持內核 Poll 模型,能經受高負載的考驗,有報告表明能支持高達 50,000 個併發連接數。

Nginx 具有很高的穩定性。 例如當前 apache 一旦上到 200 個以上進程,web 響應速度就明顯非常緩慢了。而 Nginx 採取了分階段資源分配技術,使得它的 CPU 與內存佔用率非常低。nginx 官方表示保持 10,000 個沒有活動的連接,它只佔 2.5M 內存,所以類似 DOS 這樣的攻擊對 nginx 來說基本上是毫無用處的。

Nginx 支持熱部署。它的啓動特別容易, 並且幾乎可以做到 7*24 不間斷運行,即使運 行數個月也不需要重新啓動。對軟件版本進行進行熱升級。

Nginx 採用 master-slave 模型,能夠充分利用 SMP 的優勢,且能夠減少工作進程在磁 盤 I/O 的阻塞延遲。當採用 select()/poll()調用時,還可以限制每個進程的連接數。

Nginx 代碼質量非常高,代碼很規範,手法成熟, 模塊擴展也很容易。特別值得一提的是強大的 Upstream 與 Filter 鏈。

Nginx 採用了一些 os 提供的最新特性如對 sendfile (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,從而大大提高了性能。

免費開源,可以做高併發負載均衡。

3.nginx 常用命令?

啓動 nginx 。

停止 nginx -s stop 或 nginx -s quit 。

重載配置 ./sbin/nginx -s reload(平滑重啓) 或 service nginx reload 。

重載指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。

查看 nginx 版本 nginx -v 。

檢查配置文件是否正確 nginx -t 。

顯示幫助信息 nginx -h 。

4.工作模式及連接數上限?

events {

use epoll; #epoll 是多路複用 IO(I/O Multiplexing)中的一種方 式,但是僅用於 linux2.6 以上內核,可以大大提高 nginx 的性能

worker_connections 1024;#單個後臺 worker process 進程的最大併發鏈接數

# multi_accept on; 
}

5.nginx負載均衡幾種算法?

5種。

1.輪詢模式(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
2.權重模式
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況
3.IP_hash模式 (IP散列)
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
4.url_hash模式
5.fair模式
按後端服務器的響應時間來分配請求,響應時間短的優先分配。

6.nginx有幾種進程模型?

分爲master-worker模式和單進程模式。在master-worker模式下,有一個master進程和至少一個的worker進程,單進程模式顧名思義只有一個進程。

7.如何定義錯誤提示頁面?

# 定義錯誤提示頁面

error_page 500 502 503 504 /50x.html;

location = /50x.html { root /root;

}

8.如何精準匹配路徑?

location =開頭表示精準匹配

location = /get {
#規則 A }

9.路徑匹配優先級?

多個 location 配置的情況下匹配順序爲
首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最後是交給 / 通用匹配。當 有匹配成功時候,停止匹配,按當前匹配規則處理請求。

10.如何把請求轉發給後端應用服務器?

location = / {

proxy_pass http://tomcat:8080/index 

}

11.如何根據文件類型設置過期時間?

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}

12.禁止訪問某個目錄?

location ^~/path/ {
    deny all;
}


13.nginx負載均衡實現過程?

首先在 http 模塊中配置使用 upstream 模塊定義後臺的 webserver 的池子,名爲 proxy-web,在池子中我們可以添加多臺後臺 webserver,其中狀態 檢查、調度算法都是在池子中配置;然後在 serverr 模塊中定義虛擬主機,但是這個虛擬主 機不指定自己的 web 目錄站點,它將使用 location 匹配 url 然後轉發到上面定義好的 web 池子中,最後根據調度策略再轉發到後臺 web server 上 。

14.負載均衡配置?

Upstream proxy_nginx {

server 192.168.0.254  weight=1max_fails=2 fail_timeout=10s ; 
server 192.168.0.253 weight=2 max_fails=2fail_timeout=10s;
server192.168.0.252 backup; server192.168.0.251 down;

}

server{
 listen 80;
 server_name xiaoka.com;

location / {

 proxy_pass http:// proxy_nginx;
 proxy_set_header Host
 proxy_set_header X-Real-IP
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

15.設置超時時間?

http {
 ……….
 keepalive_timeout 60; ###設置客戶端連接保持會話的超時時間,超過這個時間,服務器會關閉該連接。 tcp_nodelay on;
 \####打開 tcp_nodelay,在包含了 keepalive 參數纔有效
 client_header_timeout 15; ####設置客戶端請求頭讀取超時時間,如果超過這個時間,客戶端還沒有發送任何數據, Nginx 將返回“Request time out(408)”錯誤
 client_body_timeout 15;

\####設置客戶端請求主體讀取超時時間,如果超過這個時間,客戶端還沒有發送任何數據, Nginx 將返回“Request time out(408)”錯誤
 send_timeout 15; ####指定響應客戶端的超時時間。這個超過僅限於兩個連接活動之間的時間,如果超過這 個時間,客戶端沒有任何活動,Nginx 將會關閉連接。

…… }

16.開啓壓縮功能好處?壞處?

好處:壓縮是可以節省帶寬,提高傳輸效率

壞處:但是由於是在服務器上進行壓縮,會消耗服務器起源

參考:

  • 《Nginx從入門到精通》

  • 《Nginx高性能Web服務器詳解》

  • 《深入理解nginx》

文章持續更新中,⛽️。另外 博主整理 + 原創 15萬字面試題,包括17個專題。歡迎大家關注“Java小咖秀”回覆“面試”即可獲得Java小咖秀面試筆記.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章