1. 程式人生 > 其它 >鎖屏面試題百日百刷-nginx如何做到高可用

鎖屏面試題百日百刷-nginx如何做到高可用

鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程式現已上線,官網地址:https://www.demosoftware.cc/#/introductionPage。已收錄了每日更新的面試題的所有內容,還包含特色的解鎖螢幕複習面試題、每日程式設計題目郵件推送等功能。讓你在面試中先人一步,吊打面試官!接下來的是今日的面試題:

====Nginx負載均衡怎麼實現的?策略有哪些?

為了避免伺服器崩潰,大家會通過負載均衡的方式來分擔伺服器壓力。將對臺伺服器組成一個叢集,當用戶訪問時,先訪問到一個轉發伺服器,再由轉發伺服器將訪問分發到壓力更小的伺服器。

Nginx負載均衡實現的策略有以下五種:

1、輪詢(預設)

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某個伺服器宕機,能自動剔除故障系統。

upstream backserver {

server 192.168.0.12;

server 192.168.0.13;

}

2、權重 weight

weight的值越大分配到的訪問概率越高,主要用於後端每臺伺服器效能不均衡的情況下。其次是為在主從的情況下設定不同的權值,達到合理有效的地利用主機資源。

upstream backserver {

server 192.168.0.12 weight=2;

server 192.168.0.13 weight=8;

}

3ip_hash( IP繫結)

每個請求按訪問IP的雜湊結果分配,使來自同一個IP的訪客固定訪問一臺後端伺服器, 並且可以有效解決動態網頁存在的session共享問題。

upstream backserver {

ip_hash;

server 192.168.0.12:88;

server 192.168.0.13:80;

}

4fair(第三方外掛)

必須安裝upstream_fair模組。

對比 weightip_hash更加智慧的負載均衡演算法,fair演算法可以根據頁面大小和載入時間長短智慧地進行負載均衡,響應時間短的優先分配。哪個伺服器的響應速度快,就將請求分配到那個伺服器上。

upstream backserver {

server server1;

server server2;

fair;

}

url_hash(第三方外掛)

必須安裝Nginxhash軟體包

按訪問urlhash結果來分配請求,使每個url定向到同一個後端伺服器,可以進一步提高後端快取伺服器的效率。

upstream backserver {

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

}

====Nginx配置高可用性怎麼配置(負載均衡怎麼做配置)?

當上遊伺服器(真實訪問伺服器),一旦出現故障或者是沒有及時相應的話,應該直接輪訓到下一臺伺服器,保證伺服器的高可用

Nginx配置程式碼:

server {

listen 80;

server_name www.lijie.com;

location / {

### 指定上游伺服器負載均衡伺服器

proxy_pass http://backServer;

###nginx與上游伺服器(真實訪問的伺服器)超時時間 後端伺服器連線的超時時間_發起握手等

候響應超時時間

proxy_connect_timeout 1s;

###nginx傳送給上游伺服器(真實訪問的伺服器)超時時間

proxy_send_timeout 1s;

### nginx接受上游伺服器(真實訪問的伺服器)超時時間

proxy_read_timeout 1s;

index index.html index.htm;

}

}

====Nginx怎麼判斷別IP不可訪問?

如果訪問的ip地址為192.168.9.115,則返回403

if ($remote_addr = 192.168.9.115) {

return 403;

}

====nginx怎麼限制瀏覽器訪問

## 不允許谷歌瀏覽器訪問 如果是谷歌瀏覽器返回500

if ($http_user_agent ~ Chrome) {

return 500;

}

====nginxRewrite全域性變數是什麼?

$args 這個變數等於請求行中的引數,同$query_string

$content length 請求頭中的Content-length欄位。

$content_type 請求頭中的Content-Type欄位。

$document_root 當前請求在root指令中指定的值。

$host 請求主機頭欄位,否則為伺服器名稱。

$http_user_agent 客戶端agent資訊

$http_cookie 客戶端cookie資訊

$limit_rate 這個變數可以限制連線速率。

$request_method 客戶端請求的動作,通常為GETPOST

$remote_addr 客戶端的IP地址。

$remote_port 客戶端的埠。

$remote_user 已經經過Auth Basic Module驗證的使用者名稱。

$request_filename 當前請求的檔案路徑,由rootalias指令與URI請求生成。

$scheme HTTP方法(如httphttps)。

$server_protocol 請求使用的協議,通常是HTTP/1.0HTTP/1.1

$server_addr 伺服器地址,在完成一次系統呼叫後可以確定這個值。

$server_name 伺服器名稱。

$server_port 請求到達伺服器的埠號。

$request_uri

包含請求引數的原始URI,不包含主機名,如”/foo/bar.php?arg=baz”

$uri 不帶請求引數的當前URI$uri不包含主機名,如”/foo/bar.html”

$document_uri $uri相同。

更多面試題可關注"demo鎖屏面試題"公眾號通過小程式或App獲取面試題和學習資源