1. 程式人生 > >Nginx與Apache解析php檔案的區別

Nginx與Apache解析php檔案的區別

一、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 interface,是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服務。

相關推薦

NginxApache解析php檔案區別

一、Apache是如何解析php檔案的 我們常說的lamp架構是linux、apache、mysql、php,我們知道任何架構或者網站離不開資料庫的支援,那麼php和apache又是如何協同工作的呢? php是apache的一個外掛程式,必須依靠web伺服器才可以執行

ApacheNginx、Tomcat、PHP區別

linuxapachenginxApache、Nginx、Tomcat、PHP的區別Apache和Nginx算是市面上兩款比較強大的WEB服務軟件。Apache的優點:支持模塊多,功能多運行穩定性強支持PHP模塊,無需安裝其他多余的組件就可以實現.php動態頁面的解析地址重寫功能(rewrite)強大Ngin

簡析 Tomcat 、Nginx Apache區別

簡析 Tomcat 、Nginx 與 Apache 的區別 本文講的是簡析 Tomcat 、Nginx 與Apache的區別, 經常在用 apache 和 tomcat 等這些伺服器,可是總感覺還是不清楚他們之間有什麼關係,在用 tomcat 的時候總出現 apache,總是感到迷惑。這可能是很多初學伺服

apache無法解析php檔案,顯示php原始碼或直接下載檔案

我百度了一下午,根本原因是漏了一個php擴充套件:mod_php 安裝完重啟apache就好了。 yum install mod_php 其他解決辦法 羅列一下百度搜到的一些其他解決辦法,本人嘗試無用。   1.找到: AddType application/x

nginxapache處理靜態檔案速度快,但是nginx處理大量併發的php請求時,容易出現502錯誤,頻率大概是多少

首先要明確一點的是502是怎麼出現的,為什麼會出現502呢?一般而言,出現502的錯誤是因為php-cgi連線數不夠導致的。舉個例子:php-cgi開10個程序,前端發20個請求,每個請求的指令碼都sleep100s,那麼必然有至多10個請求會出現502錯誤。因此,出現502是因為php程序不夠用了,和ngi

apache無法解析php檔案顯示原始碼

在httpd.conf中新增以下程式碼即可,     AddHandler  php5-script     php     AddType     application/x-httpd-php        .php .php5     AddType     appl

NginxApache區別

代理服務器 平臺 更新 select lua 例如 存在 pla for 1、nginx相對於apache的優點: 輕量級,同樣起web 服務,比apache占用更少的內存及資源 抗並發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高並發下ngi

LNMP環境問題--nginx解析php檔案

php、nginx都裝完了,配置了好長時間都不對。剛整好。 nginx.conf 開始是 server { listen 8080; ser

Linux下Apache無法解析.php檔案

    解決辦法:     修改Apache的配置檔案:httpd.conf 通過增加引數模組,讓 Apache 將副檔名 .php 解析成 PHP。為了避免潛在的危險,例如上傳或者建立類似exploit.php.jpg的檔案並被當做 PHP 執行,我們不再使用 Apach

淺談NginxApache區別

1、Nginx是一個很強大的高效能Web、郵件和反向代理伺服器,它具有很多非常優越的特性, 在連線高併發的情況下,Nginx是Apache伺服器不錯的替代品。 2、單機能夠支援高

Nginx路由簡單解析--php正則表示式例項解析

一條簡單的路由 (以下內容都是我當時有限的理解,後面自己理解深入了再更新,有錯誤也希望能幫忙指正下) 在webserver環境裡,我們經常要用到路由,將url重寫解析,才能訪問到真正的介面。 以Nginx為例,一個http請求(或者其他協議)通過網頁或者端上傳送

NginxApache比較

一個 性能 影響 lec rewrite 定性 poll 超過 內存 Nginx特點:高性能epoll 異步非阻塞多個連接(萬級別)可以對應一個進程 支持反向代理支持7層負載均衡靜態文件、反向代理、前端緩存等處理方便支持高並發連接,每秒最多的並發連接請求理論可以達到 500

使用Apache的ab工具對比NginxApache靜態頁面處理能力

tt使用Apache的ab工具對比Nginx與Apache靜態頁面處理能力前言:為什麽要進行壓力測試 在運維工作中,壓力測試是一項非常重要的工作。比如在一個網站上線之前,能承受多大訪問量、在大訪問量情況下性能怎樣,這些數據指標好壞將會直接影響用戶體驗。但是,在壓力測試中存在一個共性,那就是壓力測

隱藏nginxApachephp,tomcat服務版本號

nginx apache php tomcat nginx 修改nginx.conf http標簽server_tokens off;apache: 在apache配置文件httpd.conf中,加入以下代碼ServerTokens Prod ServerSignature Off

搭建LNMP,可以解析PHP檔案

一、安裝 nginx 1. yum -y install pcre-devel zlib-devel links  下載相應軟體 可以使用rpm -qa 軟體名 來檢視是否安裝成功?? 2.useradd -u 250  -M -s /sbin/nologi

LinuxWindows下txt檔案區別

  一、區別 換行符:     1.windows中的換行符是\r\n, 2. linux/unix下的換行符是\n。 其中: 回車符:\r=0x0d (13) return; #回車(carriage return) 換行符:\n=0x0a (10) newline。#換行(newline)       二

NginxApache優缺點比較

正向代理 : 是一個位於客戶端和原始伺服器 (origin server) 之間的伺服器,為了從原始伺服器取得內容, 客戶端向代理髮送一個請求並指定目標 ( 原始伺服器 ) ,然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正

基於軟體的負載均衡(NginxZooKeeper解析

什麼是負載均衡 負載均衡(Load Balance)是分散式系統架構設計中必須考慮的因素之一,它通常是指,將請求/資料【均勻】分攤到多個操作單元上執行,負載均衡的關鍵在於【均勻】。常見網際網路分散式架構如上,分為客戶端層、反向代理nginx層、站點層、服務層、

ubuntu16.04下nginxapachephp-fpm配置

昨天在ubuntu16.04下安裝了lamp,一切正常,想著再裝個nginx伺服器來玩下 先是下載安裝了nginx,php-fpm sudo apt-get install nginx sudo apt-get install php-fpm 關於php-

Tp3.2在nginx下隱藏index.php檔案

專案在wamp環境下可以執行,移到線上lnmp環境顯示404錯誤,百度一下說是nginx不支援pathinfo模式,需要自己手動配置 在  域名.conf中 root  目錄 加入如下所示: if (!-e $request_filename) { rewr