作爲一個後端程序員,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