參考:
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;
}