2012-01-11 31 views
5

我想了解的網絡服務器(例如:nginx的)如何以及CGI/FastCGI的相互通信。 webserver如何將cgi腳本傳遞給cgi進程以及cgi進程如何響應請求。webserver和cgi進程如何相互通信?

在Nginx的,我們配置這樣讓nginx的傳遞PHP腳本PHP-FPM

location/{ 
      root /home/service/public_html; 
      fastcgi_pass unix:/tmp/php-fpm-test.socket; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME /home/service/public_html/index.php; 
      include  fastcgi_params; 
     } 

它是如何工作的?

編輯:會意識到,如果有人能夠給我一片的僞代碼來描述一個過程(或其他)和php-fpm的Unix套接字之間的通信。

回答

2

CGI應用程序是一個簡單的標準可執行文件或腳本 - 每個HTTP請求到web服務器對應於可執行文件或腳本的其中環境變量用於傳遞有關請求的信息(例如,請求的單一執行/實例URL和請求方法),並且HTTP請求主體在標準輸入上傳遞。腳本/可執行文件將原始HTTP output通過標準輸出流傳遞到Web服務器。

對於CGI應用程序的示例,請參見wikipedia page爲例perl腳本和更多的細節都通的CGI specification


快速CGI是減少CGI接口的開銷試圖讀取 - 由於在許多操作系統上開始一個新進程是一項相對昂貴的任務,Fast CGI試圖通過允許一個長時間運行的Fast CGI進程處理多個HTTP請求來減少這一點。

儘管Fast CGI的很多部分都與CGI類似(例如環境變量的格式),但Fast CGI 所有信息均通過標準輸入流傳遞。

你應該嘗試看Fast CGI website更多信息 - 尤其是快速CGI規範是在那裏,並解釋這一切的細節。

+0

我認爲這是沒有這麼多,新工藝是昂貴的,因爲CGI程序往往需要啓動大型,複雜的過程就像一個Perl解釋器。我最近用C寫的一個非常簡約的CGI程序嘗試稱爲[CGI蹦牀(http://gcbenison.wordpress.com/2012/04/23/deploying-a-scheme-web-application-the-taubatron/) 。由於啓動這個小過程而造成的延遲非常低。 – gcbenison 2012-05-01 04:02:39