cgi 是為了保證 web server 傳遞過來的資料是標準格式的,方便 cgi 程式的編寫者。
web server(比如說 nginx)只是內容的分發者。
當 web server 收到/index.php
這個請求後,會啟動對應的 cgi 程式,這裡就是 php 的解析器。接下來 php 解析器會解析 php.ini 檔案,初始化執行環境,然後處理請求,再以規定 cgi 規定的格式返回處理後的結果,退出程序。web server 再把結果返回給瀏覽器。
cgi 是個協議,跟程序什麼的沒關係。
fastcgi 是用來提高 cgi 程式效能的。
那麼 cgi 程式的效能問題在哪呢?"php 解析器會解析php.ini
檔案,初始化執行環境",就是這裡了。標準的 cgi 對每個請求都會執行這些步驟,所以處理每個請求的時間會比較長。
那麼 fastcgi 是怎麼做的呢?首先,fastcgi 會先啟乙個 master,解析配置檔案,初始化執行環境,然後再啟動多個 worker。當請求過來時,master 會傳遞給乙個 worker,然後立即可以接受下乙個請求。這樣就避免了重複的勞動,效率自然是高。而且當 worker 不夠用時,master 可以根據配置預先啟動幾個 worker 等著;當然空閒 worker 太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是 fastcgi 對程序的管理。
php-fpm 是乙個實現了 fastcgi 的程式,被 php 官方收錄。
php 的直譯器是 php-cgi,它只是個 cgi 程式,只能解析請求,返回結果,不會程序管理。所以就出現了一些能夠排程 php-cgi 程序的程式,比如說由 lighthttpd 分離出來的 spawn-fcgi。php-fpm 也是這麼個東西,在長時間的發展後,逐漸得到了大家的認可,也越來越流行。
fastcgi與php fpm的關係
剛開始對這個問題我也挺糾結的,看了 http權威指南 後,感覺清晰了不少。首先,cgi是幹嘛的?cgi是為了保證web server傳遞過來的資料是標準格式的,方便cgi程式的編寫者。web server 比如說nginx 只是內容的分發者。比如,如果請求 index.html,那麼web serv...
FastCgi與PHP fpm之間的關係
我在網上查fastcgi與php fpm的關係,查了快一周了,基本看了個遍,真是眾說紛紜,沒乙個權威性的定義。網上有的說,fastcgi是乙個協議,php fpm實現了這個協議 有的說,php fpm是fastcgi程序的管理器,用來管理fastcgi程序的 有的說,php fpm是php核心的乙個...
FastCgi 與 PHP FPM 之間的區別
cgi 是為了保證 web server 傳遞過來的資料是標準格式的,方便 cgi 程式的編寫者。web server 比如說 nginx 只是內容的分發者。當 web server 收到 index.php這個請求後,會啟動對應的 cgi 程式,這裡就是 php 的解析器。接下來 php 解析器會...