java面經查缺補漏之四十二天(今天來學習nginx的理論知識)

參考:

1.https://blog.csdn.net/hustspy1990/article/details/102989305?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5

2.https://blog.csdn.net/tuesdayma/article/details/81359913

1.什麼是nginx?

Nginx 是一個免費的,開源的,高性能的 HTTP 服務器和反向代理,負載均衡,以及 IMAP / POP3 代理服務器。Nginx 以其高性能,穩定性,豐富的功能,簡單的配置和低資源消耗而聞名。

2.Nginx 如何實現高併發?

多進程+epoll。epoll是時間驅動型的,一個就已經可以支持很大的併發數了,多個進程,也就是多個epoll,那麼就可以支撐很高的併發了。

3.什麼是Master Worker 模型?

這裏寫圖片描述

master進程:主要用來管理worker進程,監控worker進程的運行狀態,當worker進程退出後(異常情況下),會自動重新啓動新的worker進程。它不需要處理網絡事件,不負責業務的執行。

worker進程:基本的網絡事件,則是放在worker進程中來處理了。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致。

4.Nginx常見的優化配置?

(1)調整工作進程的數量,實際上每個CPU運行一個工作進程。一般等於CPU的總核數。

(2)啓用gzip壓縮,壓縮文件大小,減少了客戶端http的傳輸帶寬,因此提高了頁面加載速度。

 

(3)每個工作進程允許最大的同時連接數Maxclient = work_processes * worker_connections

5.爲什麼 Nginx 不使用多線程?

(1)進程之間不共享資源,不需要加鎖,減少了使用鎖對性能造成的影響,同時降低編程的複雜度,降低開發成本。

(2)採用獨立的進程,可以讓進程互相之間不會影響,如果一個進程發生異常退出時,其它進程正常工作,master 進程則很快啓動新的 worker 進程,確保服務不會中斷,從而將風險降到最低。

(3)如果Nginx 使用了多線程的時候,由於線程之間是共享同一個地址空間的,當某一個第三方模塊引發了一個地址空間導致的斷錯時 (eg: 地址越界), 會導致整個Nginx全部掛掉; 當採用多進程來實現時, 往往不會出現這個問題.

6.Nginx的反向代理?

實質: 個人理解反向代理就是nginx攔截動態請求之後轉發給某個tomcat。這個在集羣和分佈式都可以使用這個來進行配置轉發。
作用: 隱藏真實的訪問ip地址。我們可以看到流程圖中我們訪問的最多也就是公網的ip,但是具體tomcat在那個ip是不知道的,這樣就能減少tomcat被攻擊,提高了服務器的安全性。

這裏寫圖片描述

     server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass   http://127.0.0.1:8090;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

 

7.Nginx的負載均衡?

定義: 爲了解決高併發問題,負載均衡服務器攔截所有的請求,採用負載均衡算法,分配到不同的tomcat上。

作用: 減少單臺tomcat的壓力

upstram XXX: 表示負載均衡服務器,也是通常再說的上游服務器

三種基本的負載均衡算法: 輪詢、權重、ip綁定,最少鏈接。

輪詢

upstream  mzd {
       server 127.0.0.1:8082;
       server 127.0.0.1:8081;
    }

權重

upstream  mzd {
       server 127.0.0.1:8082 weight=2;
       server 127.0.0.1:8081 weight=3;
    }

 

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