Nginx 由淺入深

1、Nginx基礎

  • Nginx 究竟是什麼?nginx

    Nginx是⼀個⾼性能的HTTP和反向代理web服務器,核⼼特色是佔有內存少,併發能⼒強web

  • Nginx ⼜能作什麼事情(應⽤場景)瀏覽器

    • Http服務器(Web服務器)性能⾮常⾼,⾮常注重效率,可以經受⾼負載的考驗。 ⽀持50000個併發鏈接數,不只如此,CPU和內存的佔⽤也⾮常的低,10000個沒有活動的鏈接才佔⽤2.5M的內存。
    • 反向代理服務器 (瀏覽器發送請求到Nginx,由Nginx反向代理選擇原始服務器獲得結果,最終再返回給客戶端瀏覽器 Nginx + Tomcat)
    • 正向代理 (國內訪問 google)
    • 負載均衡服務器 (由Nginx反向代理多臺Tomcat,這樣⼀個尋找肯定的過程就叫作負載均衡)
    • 動靜分離(靜態資源由Nginx 直接處理,動態Servlet 請求代理到Tomcat)
  • Nginx 特色tomcat

    • 跨平臺
    • 配置簡單
    • 高併發,性能好,穩定,宕機率低
  • Nginx主要命令bash

    • nginx -s start
    • nginx -s stop
    • nginx -s reload (從新加載nginx.conf配置⽂件,Master 節點不重啓)

2、Nginx 核心配置文件解讀

Nginx 核心配置文件conf/nginx.conf包含三塊內容:全局塊、events塊、http塊。服務器

  • 全局塊網絡

    從配置⽂件開始到events塊之間的內容,此處的配置影響nginx服務器總體的運⾏,⽐如worker進程的數量、錯誤⽇志的位置等 併發

  • events塊負載均衡

    events塊主要影響nginx服務器與⽤戶的⽹絡鏈接,⽐如worker_connections 1024,標識每一個workderprocess⽀持的最⼤鏈接數爲1024 socket

  • http塊 http塊是配置最頻繁的部分,虛擬主機的配置,監聽端⼝的配置,請求轉發、反向代理、負載均衡等 ⚠️http下可配置多個server

3、Nginx應⽤場景之反向代理

  • 部署tomcat 8080

  • 修改nginx配置

  • nginx -s relod (重啓,配置生效)

  • 注意 location 語法,nginx中server/location == tomcat中的Host/Context

    location [=|~|~*|^~] /uri/ { … }
    複製代碼

    在nginx配置⽂件中,location主要有這⼏種形式:

    1. 精確匹配 location = /lagou { }
    2. 匹配路徑的前綴 location ^~ /lagou { }
    3. 不區分⼤⼩寫的正則匹配 location ~* /lagou { }
    4. 正則匹配 location ~ /lagou { }
    5. 普通路徑前綴匹配 location /lagou { }

    優先級 :asc

4、Nginx應⽤場景之負載均衡

1. Nginx負載均衡策略

  • 輪詢 (默認策略)
    upstream lagouServer{
        server 111.229.248.243:8080;
        server 111.229.248.243:8082;
    }
    location /abc {
        proxy_pass http://lagouServer/;
    }
    複製代碼
  • weight 權重
    upstream lagouServer{
        server 111.229.248.243:8080 weight=1;
        server 111.229.248.243:8082 weight=2;
    }
    複製代碼
  • ip_hash 按 ip 走,每個客戶端會打進同一個服務
    upstream lagouServer{
        ip_hash;
        server 111.229.248.243:8080;
        server 111.229.248.243:8082;
    }
    複製代碼

5、Nginx應⽤場景之動靜分離

6、 Nginx底層進程機制剖析

1.Nginx 啓動

以daemon多進程⽅式在後臺運⾏,有⼀個Master進程和多個Worker進程

  • Master 進程
    • 接收外界信號像Worker 發送信號 如 nginx -s reload
    • 監控Worker,Worker異常退出,Master 自動重啓新的Worker
  • Worker 進程
    • 處理網絡請求,各Worker獨立,一個請求只能在一個Worker。worker進程的個數是能夠設置的,⼀般設置與機器cpu核數⼀致。

2. Nginx進程模型示意圖

  • 舉例以 ./nginx -s reload 來講明nginx信號處理這部分

    1. Master 對配置文件進行語法檢測
    2. 配置(⽐如修改了監聽端⼝,那就嘗試分配新的監聽端⼝)
    3. 配置成功則使⽤新的配置,新建worker進程
    4. new worker success,old worker close
    5. old worker 會繼續運行到請求沒有爲止才關閉
  • worker進程處理請求

    • 請求進來有多個Worker ,每一個Worker都有可能處理請求
    • Master 啓動好後,會創建socket連接,而後fork出多個Worker。因此,全部Worker進程的監聽描述符listenfd在新鏈接到來時都變得可讀
    • nginx 使用互斥鎖保證只有一個Worker處理一個請求。拿到互斥鎖的那個進程註冊listenfd讀事件,在讀事件⾥調⽤accept接受該鏈接,而後解析、處理、返回客戶端
  • nginx多進程模型好處

    • 每一個worker進程都是獨⽴的,不須要加鎖,節省開銷
    • 每一個worker進程都是獨⽴的,互不影響,⼀個異常結束,其餘的照樣能提供服務
    • 多進程模型爲reload熱部署機制提供了⽀撐

《lagouedu》nginx總結

相關文章
相關標籤/搜索