Nginx FastCGI 原理

適用php

Nginx經過fastcgi調用python, Perl和C++等寫的CGI程序。PHP有PHP-FPM (FastCGI Process Manager),這個對PHP來講更好的FastCGI進程管理器,關於PHP-FPM的更多信息,請Google php-fpm+nginxpython

原理nginx

Nginx並不提供支持對外部程序的直接調用或者解析(因此缺乏像apache裏的mod_php這樣的模塊),全部的外部程序(包括PHP)必須經過fastcgi接口來調用,在Linux下接口是socket (文件socket或者Internet socket)。因此爲了調用CGI程序,咱們須要一個fastcgi的wrapper,這個wrapper綁定在某個固定socket上(好比端口或者文件socket),當nginx將CGI請求發送給這個socket的時候,wrapper接納請求並fork一個新的線程,這個線程調用外部的程序或者解釋器處理腳本並讀取返回值,而wrapper再將返回的數據(網頁或者圖片等)經過fastcgi將數據經過那個固定的socket傳遞給nginx。示意圖以下:apache

Ningx的FastCGI原理app

因此,咱們首先須要一個wrapper,這個wrapper須要完成的工做:socket

  1. 經過調用fastcgi(庫)的函數經過socket和ningx通訊(讀寫socket是fastcgi內部實現的功能,對wrapper是非透明的)
  2. 調度thread,進行fork和kill
  3. 和application進行通訊
相關文章
相關標籤/搜索