從瀏覽器輸入URL會發生什麼2?FPM(FastCGI Process Manager)概述

從瀏覽器輸入URL會發生什麼2?FPM(FastCGI Process Manager)概述


在之前的文章中我們稍微提到了了cgi和fastcgi在服務器端響應請求.作爲一個php程序員,必然要學習fpm,在現在lnmp架構下fpm幾乎成了必然使用的地方,所以寫下本片博客,作爲一個概述,粗略的討論fpm.更詳細的內容,請參考官網.


===

cgi AND fast CGI

首先我們給出一個cgi和fast cgi的定義:

  • CGI:是 Web Server 與 Web Application 之間數據交換的一種協議.
  • FastCGI:同 CGI,是一種通信協議,但比 CGI 在效率上做了一些優化。同樣,SCGI 協議與 FastCGI 類似。

在服務器請求中他的作用如下圖:

在這裏插入圖片描述

FastCGI是一種讓交互程序與Web服務器通信的協議。FastCGI是早期通用網關接口(CGI)的增強版本。

fpm

聊完了cgi和fastcgi,我們來說說phper程序員經常接觸的fpm.我們先看一看官方的文檔中提到的定義.

PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.

換成漢語FPM(FastCGI 進程管理器)用於替換 PHP FastCGI的一個實現,並附帶了大量對於高負載網站是非常有用的附加功能,(ps這個翻譯和官方翻譯不一樣,我覺得這樣翻譯會更合適,官方的漢化翻譯有明顯不對勁).

它具有一下特點:

  • 支持平滑停止/啓動的高級進程管理功能;
  • 可以工作於不同的 uid/gid/chroot 環境下,並監聽不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的設置);
  • stdout 和 stderr 日誌記錄;
  • 在發生意外情況的時候能夠重新啓動並緩存被破壞的 opcode;
  • 文件上傳優化支持;
  • “慢日誌”(slowlog) - 記錄腳本(不僅記錄文件名,還記錄 PHP backtrace 信息,可以使用 ptrace或者類似工具讀取和分析遠程進程的運行數據)運行所導致的異常緩慢;
  • fastcgi_finish_request() - 特殊功能:用於在請求完成和刷新數據後,繼續在後臺執行耗時的工作(錄入視頻轉換、統計處理等);
  • 動態/靜態子進程產生;
    基本 SAPI 運行狀態信息(類似Apache的 mod_status);
  • 基於 php.ini 的配置文件(在lnmp下通常是fastcgi.conf)。

另外說一點,前兩天看到一個面試題提到幾個有趣的點.第一,fpm是一個進程池管理器(FastCGI pools,用官方的說法就是一個fastcgi池子),他可以配置多個進程池.第二,默認狀態下fpm的默認端口是9000.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章