1. 程式人生 > >apache php 與nginx php 的區別

apache php 與nginx php 的區別

css apach stc 必須 靜態文件 ast mod 解釋器 gin

apache是通過mod_php來解析php  nginx是通過php-fpm(fast-cgi)來解析php
1. PHP 解釋器是否嵌入 Web 服務器進程內部執行

mod_php 通過嵌入 PHP 解釋器到 Apache 進程中,只能與 Apache 配合使用,而 cgi 和 fast-cgi 以獨立的進程的形式出現,只要對應的Web服務器實現 cgi 或者 fast-cgi 協議,就能夠處理 PHP 請求。

mod_php 這種嵌入的方式最大的弊端就是內存占用大,不論是否用到 PHP 解釋器都會將其加載到內存中,典型的就是處理CSS、JS之類的靜態文件是完全沒有必要加載解釋器。

2. 單個進程處理的請求數量

mod_php 和 fast-cgi 的模式在每個進程的生命周期內能夠處理多個請求(fast-cgi可以根據需要來調整進程的多少),而 cgi 的模式處理一個請求就馬上銷毀進程,在高並發的場景下 cgi 的性能非常糟糕。 

每一個Web請求PHP都必須重新解析php.ini、重新載入全部dll擴展並重初始化全部數據結構。使用FastCGI,所有這些都只在進程啟動時發生一次

綜上,如果對性能有極高的要求,可以將靜態請求和動態請求分開,這時 Nginx + php-fpm 是比較好的選擇。

PS: cgi、fastcgi 通常指 Web 服務器與解釋器通信的協議規範,而 php-fpm 是 fastcgi 協議的一個實現。

apache php 與nginx php 的區別