nginx功能詳解(靈魂8問)

  1. Nginx是什麼?
    引用百度百科的解釋:Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,因它的高性能,高穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。

  2. Nignx主要功能有哪些?
    反向代理服務器
    實現負載均衡
    做靜態資源服務器
    作爲 HTTP Server

  3. 怎麼理解正向代理和反向代理?
    正向代理是在消費方進行配置,代理服務器知道是從哪臺消費方服務器的請求,知道目標是要到哪裏。
    反向代理是在服務端進行配置,代理服務器接收到消費方的請求後,知道最終服務請求到哪臺服務端的服務器。
    通俗的講是正向還是反向代理,就看代理服務器是知道客戶端的請求服務器信息還是服務端的處理服務器信息。
    在這裏插入圖片描述

  4. Niginx有哪幾種負載均衡策略
    **輪詢策略:**默認策略,按時間請求先後分發的不同的服務器;
    ip_hash: 根據請求的IP信息不同分發到不同的服務器,相同IP的多次請求會在固定的一個或者多個服務器上。
    **按權重負載:**給每臺服務器配置權重值,根據權重比例進行分流;
    niginx自帶的策略就上面幾種,常用的第三方策略還有:
    **最短響應時間:**服務器的相應時間長短來分配;
    **url_hash:**即根據相同的請求url會固定在一個或者多個服務器上。

  5. nginx爲什麼快?nginx作爲HTTPserver與tomcat有什麼區別。
    nginx採用的是異步非阻塞的方式來處理請求,通過多進程(單線程)來實現多路IO複用模型;
    首先:採用了多路IO複用模型,重要的是其中的select方法,一個select能通過OS層面監聽多路請求,select收到服務請求之後馬上分配給對應的workhander處理,並且不用同步等待workhander處理響應,
    其次:select採用的是多進程(單線程),一般配置一個進程數跟CPU個數一致,可以充分使用CPU,並且單線程模式,避免高併發時大量的線程切換帶來的CPU開銷。單線程模式跟redis的爲什麼快類似。即當一個請求只需要在很短的時間內完成時,就不需要在多個線程間去來回切換。

  6. nginx怎麼樣調優?
    nginx的調優一般從以下四個方面來考慮:
    a. 調整max_prochesss參數跟CPU個數相同,max_connection跟操作系統參數匹配;
    b. 禁用access_logs,
    c. 配置報文壓縮傳輸GZIP
    d. 靜態資源訪問設置緩存,當訪問相同的靜態資源時從緩存中獲取,加快資源加載速度。

  7. nginx怎麼實現生產環境的高可用?
    在生產環境上很多時候是以Nginx 做反向代理對外提供服務,但是一天Nginx難免遇見故障,如:服務器宕機。當Nginx 宕機那麼所有對外提供的接口都將導致無法訪問。所以需要使用keepalived 來實現Nginx的高可用。
    Keepalived 高可用服務之間的故障切換轉移,是通過VRRP(虛擬路由冗餘) 來實現的。
    在Keepalived 服務正常工作時,主Master 節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup 節點自己還活着,當主Master 節點發生故障時,就無法發送心跳消息,備節點也就因此無法繼續檢測到來自主Master 節點的心跳了,於是調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
    Keepalived支持多種模式的探測 ip層的ping 命令,tcp層的telnet命令,應用層的自定義探測腳本命令。

  8. nginx配置信息詳解

worker_processes 8;  #允許生成的進程數,一般配置跟cpu個數相同
pid /nginx/pid/nginx.pid;   #指定nginx進程運行文件存放地址
error_log log/error.log debug;  #制定日誌路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此爲:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #設置網路連接序列化,防止驚羣現象發生,默認爲on
    multi_accept on;  #設置一個進程是否同時接受多個網絡連接,默認爲off
    #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大連接數,默認爲512
}
http {
    include       mime.types;   #文件擴展名與文件類型映射表
    default_type  application/octet-stream; #默認文件類型,默認爲text/plain
    #access_log off; #取消服務日誌    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
    access_log log/access.log myFormat;  #combined爲日誌格式的默認值
    sendfile on;   #允許sendfile方式傳輸文件,默認爲off,可以在http塊,server塊,location塊。
    sendfile_max_chunk 100k;  #每個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。
    keepalive_timeout 65;  #連接超時時間,默認爲75s,可以在http,server,location塊。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #熱備
    }
    error_page 404 https://www.baidu.com; #錯誤頁
    server {
        keepalive_requests 120; #單連接請求上限次數。
        listen       4545;   #監聽端口
        server_name  127.0.0.1;   #監聽地址       
        location  ~*^.+$ {       #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。
           #root path;  #根目錄
           #index vv.txt;  #設置默認頁
           proxy_pass  http://mysvr;  #請求轉向mysvr 定義的服務器列表
           deny 127.0.0.1;  #拒絕的ip
           allow 172.18.5.54; #允許的ip           
        } 
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章