1. 搭建環境:
(1) 本機虛擬機器位址192.168.100.142。虛擬機器中啟動nginx容器,php-fpm容器,mysql容器,均監聽預設的埠;
(2) nginx容器配置檔案中通過proxy_pass將php請求**到php-fpm監聽的9000埠;
(3) 為實驗專案配置網域名稱my.test.com,專案目錄設定為//yii/frontend/web(這是乙個yii-advanced專案),並配置rewrite將訪問重定向到專案目錄下的index.php;
(4) 配置本機hosts檔案以便通過網域名稱訪問本地專案(192.168.100.142 my.test.com)。
2. 一次php請求過程**:
3. 乙個php頁面的請求過程說明
(1) 在本機瀏覽器中輸入**:my.test.com,請求被傳送到hosts檔案指定的192.168.100.142:80,即我本機虛擬機器的80埠;
(2) 監聽192.168.100.142:80的nginx接收到此次請求,由於這是一次http請求,所以nginx的核心模組會把它交給http模組來選擇合適的handler模組。
(3) 經過請求初始化與請求解析,確定請求//yii/frontend/web/index.php頁面的內容。由於這是乙個php的請求,nginx會把此次請求交由反向**模組中的fast-cgi模組,因為nginx不能直接和php通訊,他們之間要通過fast-cgi協議才能相互理解。而nginx的fast-cgi模組會遵循fast-cgi協議將請求相關資訊傳送給proxy_pass指定的fast-cgi上游服務,這裡就是指php-fpm;
(4) 這個php-fpm(php fastcgi 程序管理器)是php這一端遵循fast-cgi協議與web server進行通訊的服務,這樣請求就到了php這一邊。
(5) php-fpm master管理著多個php-fpm worker程序,一次請求到來時它們通過搶奪accept鎖的方式獲得這次請求的執行權。然後由這個php-fpm worker開始執行這一次請求。
(6) 經過一系列的初始化後,由zend引擎對被請求的index.php頁面內容進行詞法分析和語法分析,生成可以由zend引擎執行的opcode,然後按順序執行這些opcode,
執行完畢後會進行一系列請求關閉的工作,然後將處理結果反饋給fast-cgi的下游web server;
(5) nginx的fast-cgi模組拿到處理結果後,將結果交由一系列filter模組進行響應內容的過濾與封裝,最終反饋到請求終端。
至此,一次php頁面的請求告一段落。
一次完整請求的過程
知其然,知其所以然,不止於知其所以用。瀏覽器和服務端的傳輸 伺服器以tomcat為例 q 過濾器 和 的使用,原理,生命週期。q servlet的匹配對映順序 load on startup可指定匹配順序,其他根據url pattern的路徑匹配規則決定優先順序 注意servlet和filter的匹...
一次完整的 HTTP 請求過程
一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...
一次完整的HTTP請求過程
一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...