Nginx與Apache解析php檔案的區別

2021-10-07 09:04:59 字數 2413 閱讀 1771

一、apache是如何解析php檔案的

我們常說的lamp架構是linux、apache、mysql、php,我們知道任何架構或者**離不開資料庫的支援,那麼php和apache又是如何協同工作的呢?

php是apache的乙個外掛程式,必須依靠web伺服器才可以執行。當客戶端瀏覽器觸發事件--->php程式提交到apache伺服器---->apache伺服器根據php程式的特點判斷是php程式,並從記憶體或者硬碟中提取訪問所需要的應用程式,將其提交給php引擎程式--->php引擎程式解析並讀取資料庫生成相應的頁面--->php引擎將html頁面返回給web伺服器,web伺服器再將頁面返回給客戶端。

大致上這就是apache和php互動工作的過程。apache單獨不能處理php**,php(php 應用程式伺服器)不能單獨存在的,需要以apache為依託。也可以說php是apache功能模組的一種擴充套件,php作為apache的外掛程式,用於解 析php**。經過解析的動態網頁此時就不存在<?php ?>了。當apache服務啟動的同時也啟動了php。也就是說php必須和apache安裝在同一臺伺服器上,不可以分割。需要注意的是,mysql與apache無關,只是在響應php**中的sql操作的時候才被訪問。不需要與apache安裝在同一臺伺服器上,可以單獨存在,只需php遠端連線即可。

php作為乙個動態的、共享的模組被apache呼叫,在啟動apache時,自動載入。

二、nginx是如何解析php檔案的呢?

要想搞清楚nginx是如何與php協同工作的,先來了解一下cgi和fastcgi兩個協議。cgi:common gateway inte***ce,是web server與後台程式語言互動的一種協議。有了這個協議,開發者可以使用任何語言處理 web server 發來的請求,動態的生成內容。但 cgi 有乙個致命的缺點,那就是每處理乙個請求都需要 fork 乙個全新的程序,隨著 web 的興起,高併發越來越成為常態,這樣低效的方式明顯不能滿足需求。就這樣,fastcgi 誕生了,cgi 很快就退出了歷史的舞台。fastcgi,顧名思義為更快的 cgi,它允許在乙個程序內處理多個請求,而不是乙個請求處理完畢就直接結束程序,效能上有了很大的提高。

php-cgi是php自帶的fastcgi管理器,但有很多的缺點。fpm同樣也是fastcgi的實現,相比php-cgi有很多的優點。到了php5.3.3已經整合php-fpm了,不再是第三方的包了。php-fpm提供了更好的php程序管理方式,可以有效控制記憶體和程序、可以平滑過載php配置,只需要在./configure時,加上--enable-fpm。

fpm 是乙個 php 程序管理器,包含 master 程序和 worker 程序兩種程序:master 程序只有乙個,負責監聽埠,接收來自 web server 的請求,而 worker 程序則一般有多個 (具體數量根據實際需要配置),每個程序內部都嵌入了乙個 php 直譯器,是 php **真正執行的地方。

從 fpm 接收到請求,到處理完畢,其具體的流程如下:

1.fpm 的 master 程序接收到請求

2.master 程序根據配置指派特定的 worker 程序進行請求處理,如果沒有可用程序,返回錯誤,這也是我們配合 nginx 遇到502錯誤比較多的原因。

3.worker 程序處理請求,如果超時,返回504錯誤

4.請求處理結束,返回結果

fpm 從接收到處理請求的流程就是這樣了,那麼nginx 又是如何傳送請求給fpm 的呢?這就需要nginx 層面來說明了。

我們知道,nginx 不僅僅是乙個web 伺服器,也是乙個功能強大的proxy 伺服器,除了進行http 請求的**,也可以進行許多其他協議請求的**,包括本文與fpm 相關的fastcgi 協議。為了能使nginx 理解fastcgi 協議,nginx 提供了fastcgi 模組來將http 請求對映為對應的 fastcgi 請求。

nginx 的fastcgi 模組提供了fastcgi_param 指令來主要處理這些對映關係,除此之外,非常重要的就是 fastcgi_pass 指令了,這個指令用於指定 fpm 程序監聽的位址,nginx 會把所有的 php 請求翻譯成 fastcgi 請求之後再傳送到這個位址。

location ~ \.php$ {

include fastcgi_params;

fastcgi_pass unix:/tmp/www.sock;

#fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param script_filename /data/www$fastcgi_script_name;

在這個配置檔案中,/tmp/www.sock  是php-fpm監聽的socket檔案,nginx通過location將所有的php檔案,即http請求都交給fpm處理,實現了nginx和php的協同工作。

換言之,nginx就是作了fastcgi的乙個**,用fastcgi的方式結合使用了php。所以,需要開啟php-fpm服務。

Apache與Nginx的區別

apache與nginx的優缺點比較 1 nginx相對於apache的優點 輕量級,同樣起web 服務,比apache 占用更少的記憶體及資源 抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能 高度模組化的設計,編寫模組相對...

apache與nginx的區別

apache與nginx的優缺點比較 1 nginx相對於apache的優點 輕量級,同樣起web 服務,比apache 占用更少的記憶體及資源 抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能 高度模組化的設計,編寫模組相對...

Apache與Nginx的 比較

apache與nginx的優缺點比較 1 nginx相對於apache的優點 輕量級,同樣起web 服務,比apache 占用更少的記憶體及資源 抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能 高度模組化的設計,編寫模組相對...