CGI的英文全稱為Common Gateway Interface(公用網關介面),是Nginx和動態指令碼程式的橋樑,Nginx通過FastCGI介面將動態請求發送給FastCGI,FastCGI中的Wrapper進程產生一個線程,將請求交給指令碼解釋程式執行,然後通過原來的socket將解釋執行後的結果原路返回給Nginx,之後Nginx將結果交給用戶端。
Nginx是通過通訊端檔案socket來將動態請求發送給wrapper,使用的是Tcp協議。wrapper通過CGI介面來接受請求。這樣web伺服器和解釋程式之間完全可以獨立開發,這樣避免瞭解釋程式直接調用伺服器的介面而導致的出錯和崩潰以及安全性問題。而且可以使Nginx專心處理靜態頁面請求和轉寄動態請求,而將指令碼解譯器安裝在另一台伺服器,使伺服器的壓力得到分攤。
CGI是作為PHP程式的補丁開發的,安裝PHP首先安裝其所依賴的庫,之後在編譯配置參數時加入對CGI的支援--enable-fpm --enable-cgi等選項。編譯PHP的擴充模組,需要用到php中的phpize工具用來產生模組編譯時間的configure檔案,如果運行phpize時無法產生configure檔案,原因有:沒有安裝autoconf軟體包。
php-fpm進程的設定檔為/usr/local/php/etc/php-fpm.conf 可以對php-fpm進行相應的配置。
Nginx配置支援fastcgi:
location ~ \.php${ root html; fastcgi_pass unix:/tmp/fastcgi.soke //通過通訊端檔案和cgi建立聯絡,該檔案在php-fpm.conf中設定 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME html$SCRIPT_FILE_NAME;設定參數 include fastcgi_params; //匯入fastcgi參數設定檔,該檔案在nginx安裝時自動產生。 }