1. 程式人生 > 其它 >|NO.Z.00065|——————————|LinuxNetwork|——|Linux&Nginx&反向代理.V01|

|NO.Z.00065|——————————|LinuxNetwork|——|Linux&Nginx&反向代理.V01|



[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)