首頁  >  文章  >  後端開發  >  PHP 是怎麼接收到請求的?

PHP 是怎麼接收到請求的?

藏色散人
藏色散人轉載
2019-08-12 14:06:083068瀏覽

php 是怎麼接收到請求的?


本篇主要描述幾點

● nginx 怎麼轉發請求給PHPFPM?

● CGI 和FastCGI 到底是個什麼玩意?

● PHPFPM 是什麼?有什麼作用?

簡單場景描述

在瀏覽器上存取一個 php nginx mysql 建構的商城,並且購買一件商品。

分析(這裡造訪的有兩種資源)

● 靜態資源(網站的一些圖片,圖示等)

● 動態資源(購買商品的價格,商品的簡介等)

瀏覽器發起請求--> web_server(nginx)分發處理--> php 執行程式碼回傳結果(這是大概的流程)

nginx 是怎麼分發請求?

當用戶發起請求的時候(瀏覽器預設請求80 端口),nginx 監聽到80 端口,透過nginx 配置正則匹配是否屬於靜態資源,如果是靜態資源則返回文件,請求結束。如果是動態資源,透過 正規匹配到請求 php 腳本,那麼他會透過 nginx 的模組 ngx_http_fastcgi_module 把請求分發給 PHPFPM 處理,然後處理完畢回傳結果。

● CGI

CGI 是 Web 伺服器執行外部程式的規格。意思就是透過 CGI 可以與你的程式通信,透過 CGI 標準格式。你的程式可以和瀏覽器互動。

(簡單理解CGI 就是一個協議,規定了一些東西該怎麼傳,你的程序這邊怎麼接受處理等規範。)

● PHP-CGI

PHP-CGI 就是CGI 協定php 的一個實作版。 PHP-CGI 會為每個請求 fork 一個進程處理,處理完成後退出。 (這個模式叫做 fork-and-execute)。這樣的模式不符合現在動不動大規模的流量,所以已退出歷史舞台。

● FastCGI

FastCGI 是 CGI 的升級版,他會預先啟動一個 master 進程讀取設定文件,然後 fork 多個 work 進程等待連線。監聽到請求,分配個 work 行程做具體的處理。這樣大大提高了程式的效能。 (FastCGi 會管理進程,處理完成後不會輕易銷毀。而CGI 會為每個請求創建進程,銷毀進程。)

● PHPFPM

作為世界上最好的語言,當然要跟上潮流。當發現 PHP-CGI 效能不佳時,又恰好出現了 FastCGI 協定。所以 PHP 實作了一個 php 版本的 FastCGI,名字叫做 PHPFPM(FastCGI Process Manager)。 PHPFPM 啟動時會開啟 一個 master 進程和若干個 work 進程。 master 行程監聽請求,並轉寄給 work 行程處理,每一個 work 行程都有一個 php 解釋器,你的程式碼在每一個 work 行程中都有一份,work 行程是真正執行程式碼的地方。

SO

PHPFPM 監聽 9000 端口,nginx 匹配到 php 文件,把請求轉發給 PHPFPM。 PHPFPM master 監聽到請求後,分配給 work 處理(每一個 work 進程中都有一個 php 解釋器),PHPFPM 在啟動的時候就已經 work 進程已經載入了配置,載入了你寫程式碼。所以說 work 進程收到請求後立刻執行,然後回傳結果。

ngx_http_fastcgi_module 模組

在瀏覽器請求 web_server 是 http 協議 或 https 協議,但是 PHPFPM 不明白怎麼辦了?這裡 nginx 提供了一個 ngx_http_fastcgi_module ,ngx_http_fastcgi_module 把 http 或 https 請求 對應成 FastCGI 請求。這樣 php 程式就能跟使用者互動了。

純粹個人理解,如果有誤請指出。

相關推薦:【PHP教學

#

以上是PHP 是怎麼接收到請求的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除