LNMP架構簡述(包含CGI&FastCGl)

LNMP,CGI,FastCGl工作原理簡述

1.LNMP架構工作原理

  • 用戶通過http協議發起請求,請求會先抵達LNMP架構中nginx

  • nginx會根據用戶的請求進行判斷,這個判斷是由Location完成的

  • 判斷用戶請求的是靜態頁面,nginx直接進行處理

  • 判斷用戶的請求是動態頁面,nginx會將該請求交給fastcgi協議下發

  • fastcgi會將請求交給php-fpm管理進程,php-fpm管理進程接收到後會調用具體的工作進程wrapper

  • wrapper線程會調用php進行解析,如果只是解析php代碼那公直接返回結果給客戶端

  • 如果有查詢數據庫的操作,則由php連接數據庫(用戶密碼IP )然後發起查詢的操作

  • 最終數據由mysqI -> php -> php-fpm -> fastcgi ->nginx -> http -> user

2.CGI介紹

  • CGI ( Common Gateway Interface),即通用網關接口,是WWW技術中最重要的技術之一, 是外部應用程序(即CGI程序)與WEB服務器之間的接口標準,負責在CGI程序和Web服務器之間傳遞信息

  • CGI是Web服務器運行時,調用外部應用程序(即CGI程序)的規範,CGI規範允許Web服務器執行外部程序,並將它們的輸出發送給Web瀏覽器

出現背景

CGI是比較原始的開發動態網站的方式。由於靜態的html頁面無法實現網站的動態內容的生成,所以就需要由web務器調用CGI程序,CGI程序生成動態內容,返回給web服務器,web服務器再返回給瀏覽器。

功能:
CGI應用程序能通過Web服務器與瀏覽器進行交互,還可以通過數據庫API與數據庫服務器等外部數據源進行通信,從數據庫服務器中獲取數據,將數據格式化爲HTML文檔後,發送給瀏覽器,也可以將從瀏覽器獲得的數據放到數據庫中

CGI程序處理步驟

  • 瀏覽器通過HTML表單或超鏈接,請求指向一個CGI應用程序的URL
  • 服務器收到瀏覽器發送的請求
  • 服務器調用執行指定CGI應用程序;
  • CGI應用程序根據相關信息(通常是基於瀏覽者輸入的內容)
  • CGI應用程序把操作結果格式化爲網絡服務器和瀏覽器能夠理解的文檔(通常是HTML網頁) ,併發送給web服務器
  • web服務器把操作結果返回給瀏覽器

3.FastCGI

FastCGI實際上是增加了一些擴展功能的CGI,是CGI的改進,描述了客戶端和Web服務器程序之間傳輸數據的一種標準。FastCGl致力於減少Web服務器與CGI程序之間進行互動的開銷,從而使Web服務器可以同時處理更多的Web請求。 與CGI爲每個Web請求創建一個新的進程不同,FastCGl 使用持續的進程來處理一連串的Web請求,這些進程由FastCGI進程管理器管理,而不是Web服務器

由於FastCGl程序並不需要不斷產生新進程,因此使用FastCGI可以大大降低Web服務器的壓力併產生較高的應用效率。
CGI就是所謂的短生存期應用程序,而FastCGI就是所謂的長生存期應用程序,FastCGI 像是一個常駐( long-live )型的CGI,FastCGl 可以一直執行着,而不會每次花費時間去fork (這也是CGI最爲人詬病的fork-and-execute模式)

FastCGI程序處理步驟

  • Web服務器啓動時,初始化FastCGI的程序執行環境。例如Nginx服務器對應的ngx_ http_ fastcgi_ module模塊

  • FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程並等待來自Web服務器的連接

  • 當客戶端請求到達Web服務器時,Web服務器將該請求採用socket方式轉發到FastCGl主進程,FastCGI主進程選擇並連接到一個CGI解釋器(關聯FastCGI子進程),然後Web服務器將CGI環境變和標準輸入發送到FastCGI子進程。

  • FastCGI子進程完成處理後,將標準輸出和錯誤信息從同一socket連接返回給Web服務器。最後,FastCGI子進程關閉與Web服務器之間的連接。

  • FastCGl子進程繼續等待並處理下一個來自Web服務器的連接

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