|NO.Z.00065|——————————|LinuxNetwork|——|Linux&Nginx&反向代理.V01|
阿新 • • 發佈:2022-03-25
[LinuxNetworkEnd:Linux&Nginx&反向代理.V01] [Applications.LinuxNetworkEnd] [|nginx服務詳解|nginx狀態統計|目錄保護|基於IP並再次訪問統計頁面|] [建立虛擬機器|nginx反向代理|nginx負載均衡|實現https|]
一、講在nginx之前
### --- 同步與非同步
~~~ 同步與非同步的重點在訊息通知方式上,也就是呼叫結果的通知方式不同
~~~ #同步: ~~~ 當一個同步呼叫發出後,呼叫者要一直等待呼叫的結果通知後,才能進行後續的執行 ~~~ #非同步: ~~~ 當一個非同步呼叫發出去後,呼叫者不必一直等待呼叫的結果的返回,非同步呼叫, ~~~ 要想獲得結果,
### --- 一般有兩種方式:
~~~ 主動輪詢非同步呼叫的結果
~~~ 被呼叫方通過callback(回撥通知)來通知呼叫方呼叫結果
~~~ #例項解釋:
~~~ 同步取快遞:小明收到快遞將送的的資訊,在樓下一直等到快遞送達
~~~ 非同步取快遞:小明收到快遞將送到的資訊,快遞到樓下後,小明再下樓去取。
~~~ 非同步取快遞,小明知道快遞到達樓下的兩種方式
~~~ 不停的電話問快遞小哥到了沒有,即主動輪詢
~~~ 快遞小哥到樓下後,打電話通知小明,然後小明下樓取快遞,即回撥通知
### --- 阻塞與非阻塞: ~~~ 阻塞與非阻塞的重點在於進/執行緒等待訊息時候的行為,也就是在等待訊息的時候, ~~~ 當前進/執行緒是掛起轉態還是非掛起狀態
~~~ #阻塞:
~~~ 呼叫在發出去後,在訊息返回之前,當前進/執行緒會被掛起,知道有訊息返回,
~~~ 當前進/執行緒才會被啟用
~~~ #非阻塞:
~~~ 呼叫在發出去後,不會阻塞當前進/執行緒,而會立即返回。
~~~ #例項解釋
~~~ 阻塞取快遞:小明收到快遞即將送達的訊息後,什麼事都不做,一直專門等快遞
~~~ 非阻塞取快遞:小明收到快遞即將送達的資訊後,等快遞的時候,還一邊敲程式碼一遍刷微信
### --- 註釋:
~~~ 同步與非同步,重點在於訊息通知的方式,阻塞與非阻塞,重點在於等訊息時候的行為。
~~~ 所以,就有了下面4中組合方式:
~~~ #同步阻塞:小明收到資訊後,啥都不幹,等快遞 ~~~ #同步非阻塞:小明手收到資訊後,邊刷微博,邊等著去快遞 ~~~ #非同步阻塞:小明收到資訊後,啥都不幹,一直等著快遞員通知他取快遞 ~~~ #非同步非阻塞:小明收到資訊後,邊刷微博,邊等快遞員通知他取快遞。 ~~~ 大部分程式的I/O模型都是同步阻塞的,單個程序每次只有在一個檔案描述符上執行I/O操作, ~~~ 每次I/O系統呼叫都會阻塞,知道完成資料傳輸, ~~~ 傳統的伺服器採用的就是同步阻塞的多程序模型。 ~~~ 一個server採用一個程序負責一個request的方式,一個程序負責一個request, ~~~ 知道會話結束,程序數就是併發數,而作業系統支援的程序數是優先的, ~~~ 且程序數越多,排程的開銷也越大,因此無法面對高併發。 ~~~ nginx採用了非同步非阻塞的方式工作,我們先來了解一下I/O多路複用中的epoll模型
### --- epoll模型:
~~~ 當連線I/O時間產生的時候,epoll就會去告訴程序那個連線有I/O事件產生,
~~~ 然後程序就去處理這個事件。
~~~ 例如:小明樓下有一個收發室,每次有快遞到了,門衛就先代收並作標記,
~~~ 然後通知小明去取送給小明的快遞。
### --- 為什麼nginx比其他web伺服器併發高(nginx工作原理)
~~~ nginx配置user epool後,以非同步非阻塞方式工作。能夠輕鬆處理百萬級的併發連線
~~~ #處理過程:
~~~ 沒進來一個request,會有一個worker程序去處理,但不是全程處理,
~~~ 處理到可能發生阻塞的地方,比如向後端伺服器轉發request,並等待請求返回,
~~~ 那麼,這個處理的worker不會這麼傻等著,它會在傳送完請求後,
~~~ 註冊一個事件:“如果後端伺服器返回了,告訴我一聲,我在接著幹”。
~~~ 於是他就休息去了,此時,如果再有新的request進來,
~~~ 他就可以很快再按這種方式處理。而一旦後端伺服器返回了,
~~~ 就會觸發這個事件,worker才會來接手,這個request才會接著往下走,
~~~ 通過這種快速處理。快速釋放請求的方式,達到同樣的配置可以處理更大併發量的目的。
二、nginx詳解
### --- 概述:
~~~ nginx(engine x)是一個高效能HTTP和反向代理web伺服器,
~~~ 同時也提供了IMAP/POP3/SMTP服務,
~~~ Nginx是由伊戈爾.塞索耶夫為俄羅斯訪問量第二的rambler.ru站點開發的,
~~~ 第一個公開版本0.1.0釋出於2004年10月4日。
~~~ nginx是一款輕量級的web伺服器/方向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,
~~~ 在BSD-like協議下發行,其特點是佔有記憶體少,併發能力強。
三、工作模式:nginx工作模式:nginx和PHP的連線方式
連線過程### --- nginx有兩種工作模式:
~~~ master-worker模式和單程序模式。在master-worker模式下,
~~~ 有一個master程序和至少一個worker程序,但程序模式顧名思義只有一個程序。
~~~ 這兩種模式有各自的特點和適用場景。
### --- master-worker:
~~~ 該模式下,nginx啟動成功後,會有一個master程序和至少一個的worker程序。
~~~ master程序負責處理系統訊號,載入配置,
~~~ 管理worker程序(啟動,殺死,監控,傳送訊息/訊號燈)
~~~ worker程序負責處理具體的業務邏輯。
~~~ 管理worker程序(啟動,殺死,監控,傳送訊息/訊號等)
~~~ worker程序負責處理具體的業務邏輯,也就是說,對外部來說,
### --- 真正提供服務的是worker程序,生產環境下一般使用這種模式,因為這種模式有以下優點:
~~~ #穩定性強,只要還有worker程序存活,就能夠提供服務,並且一個worker程序掛掉master程序會立即啟動一個新的worker程序,保證worker程序數量不變,降低服務終端的概率
~~~ #配合linux的CPU親和性配置,可以充分利用多核CPU的優勢,提升效能
~~~ #處理訊號/配置重新載入/升級時可以做到儘可能少或者不中斷服務(熱重啟)
### --- 單程序模式:
~~~ 單程序模式下,nginx啟動後只有一個程序,nginx的所有工作都由這個程序負責,
~~~ 由於只有一個程序,因此可以很方便地利用gdb等工具進行除錯,
~~~ 該模式不支援nginx的平滑升級功能,任何的訊號處理都肯能造成服務中斷,
~~~ 並且由於是單程序,程序掛掉後,在沒有外部監控的情況下,無法重啟服務。
~~~ 因此,該模式一般只在開發階段和除錯時使用,生產環境下不會使用(瞭解);
~~~ 開發階段,測試階段使用,生產環境中不會去使用。
四、配置檔案結構user www www;
#程式執行使用者和組
worker_processer auto; // worker_processer開啟的程序的數量,auto:指自動指定數量
#啟動程序,指定nginx啟動的工作程序數量,建議按照CPU資料來指定,一般等於CPU核心數目
error_log /home/wwwlogs/nginx_error.log cirt;
#全域性錯誤日誌
pid /usr/local/nginx/logs/nginx.pid;
#主程序PID儲存檔案
worker_rlimit_nofile 51200;
#檔案描述符數量
events
{
use epoll;
#使用epoll模型,對於2.6以上的核心,建議使用epoll模型以提高效能
worker_connections 51200; // 一個工作程序能夠處理的最大的連線數量。總量:worker_proccsscs乘以worker_connections即可
#工作程序的最大連線數量
}
http{
#網站優化引數
server { // 具體的某一網站的配置資訊
listen 80; // 監聽埠
root html; // 網頁根目錄(/usr/local/nginx/html)
server_name www.atyanqi.com; // 伺服器域名
index index.html; // 預設載入頁面
access_log logs/access.log; // 訪問日誌儲存位置
..............;
location(.*)\.php${
#用正則匹配具體的訪問物件;
}
location {
#跳轉等規則;
}
}
server {
#虛擬主機;
}
}
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)