前言
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之間的關係。 fastCGI
fastCGI是由CGI(common gateway interface,通用閘道介面)發展而來,是http伺服器(nginx、apache)和動態指令碼語言(php)之間的通訊介面。記住,fastCGI只是一個介面。
fastCGI的優點:fastCGI採用C/S結構,可以將http伺服器和動態指令碼解析伺服器分離(二者可以部署在不同的伺服器上),讓http伺服器專一處理靜態請求和轉寄動態請求到指令碼解析伺服器;指令碼解析伺服器則專一處理動態指令碼的請求。 nginx+fastCGI
nginx不支援對外部程式的直接調用或者解析,必須通過fastCGI進行調用。nginx收到CGI請求之後,fastCGI介面在指令碼解析伺服器上,啟動一個或者多個守護進程對動態指令碼進行解析。 php-fpm
fastCGI進程管理器/引擎:即對動態指令碼進行實際解析的守護進程,由fastCGI啟動。這裡,php-fpm就是支援解析php的一個fastCGI進程管理器/引擎。 總結
fastCGI是nginx和php之間的一個通訊介面,該介面實際處理過程通過啟動php-fpm進程來解析php指令碼,即php-fpm相當於一個Live App伺服器,從而實現nginx動態解析php。因此,如果nginx伺服器需要支援php解析,需要在nginx.conf中增加php的配置:將php指令碼轉寄到fastCGI進程監聽的IP地址和連接埠(php-fpm.conf中指定)。同時,php安裝的時候,需要開啟支援fastCGI選項,並且編譯安裝php-fpm補丁/擴充,同時,需要啟動php-fpm進程,才可以解析nginx通過fastCGI轉寄過來的php指令碼。這裡寫代碼片