nginx、fastCGI、php-fpm關係梳理

前言:php

  Linux下搭建nginx+php+memached(LPMN)的時候,nginx.conf中配須要配置fastCGI,php須要安裝php-fpm擴展並啓動php-fpm守護進程,nginx才能夠解析php腳本。那麼,這樣配置的背後原理是什麼?nginx、fastCGI、php-fpm之間又有什麼關係呢?博主一直有這樣的疑惑,因爲沒法理清nginx、php-fpm之間的關係,遇到nginx解析不了php腳本的時候,每每不知所措,花費的問題排查時間也很是長。所以,特意抽時間瞭解這背後的原理,梳理了一下nginx、fastCGI、php-fpm之間的關係。
 
1、fastCGI?
  fastCGI是由CGI(common gateway interface,通用網關接口)發展而來,是http服務器(nginx、apache)和動態腳本語言(php)之間的 通訊接口。記住,fastCGI只是一個接口。
  fastCGI的優勢:fastCGI採用C/S結構,能夠 將http服務器和動態腳本解析服務器分離(兩者能夠部署在不一樣的服務器上),讓http服務器專注處理靜態請求和轉發動態請求到腳本解析服務器;腳本解析服務器則專注處理動態腳本的請求。
 
2、nginx+fastCGI
  nginx不支持對外部程序的直接調用或者解析,必須經過fastCGI進行調用。nginx收到CGI請求以後,fastCGI接口在腳本解析服務器上,啓動一個或者多個守護進程對動態腳本進行解析。
 
3、php-fpm
  fastCGI進程管理器/引擎:即對動態腳本進行實際解析的守護進程,由fastCGI啓動。這裏,php-fpm就是支持解析php的一個fastCGI進程管理器/引擎。
 
總結:
   f astCGI是nginx和php之間的一個通訊接口,該接口實際處理過程經過啓動php-fpm進程來解析php腳本,即 php-fpm至關於一個動態應用服務器,從而實現nginx動態解析php。所以,若是nginx服務器須要支持php解析,須要在nginx.conf中增長php的配置:將php腳本轉發到fastCGI進程監聽的IP地址和端口(php-fpm.conf中指定)。同時,php安裝的時候,須要開啓支持fastCGI選項,而且編譯安裝php-fpm補丁/擴展,同時,須要 啓動php-fpm進程,才能夠解析nginx經過fastCGI轉發過來的php腳本
 
參考文章:
實戰Nginx與PHP(FastCGI)的安裝、配置與優化  (文章有很是詳細的原理分析和配置參數說明,強烈推薦閱讀)
相關文章
相關標籤/搜索