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服务。

时间: 2024-12-14 06:23:20

Nginx、Apache解析php文件的区别的相关文章

如何让你的Apache支持include文件解析和支持shtml的相关配置

源地址:http://www.itokit.com/2011/0430/65992.html Apache支持include文件解析shtml首先要应该修改Apache配置文件httpd.conf 1. 确认加载include.so模块,将注释去掉: LoadModule include_module libexec/apache2/mod_include.so 2. AddType部分去掉这两段注释: AddType text/html .shtml AddOutputFilter INCLU

org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分

org.apache.felix.framework-5.6.12源码解析 org.apache.felix.framework文件夹最后的部分 由OSGi规范可见OSGi类加载流程图为: 类加载的优先级顺序基本按照如下的原则:父容器classloader(通常是app classloader) –> 其他bundle的classloader –> 当前bundle的classloader –> 动态导入的包所在bundle的classloader.这个原则既可以使相同的类(包名也相同)

Apache POI解析Excel文件

1.导入POI的jar包到BOS项目中 2. 使用POI解析Excel文件

使用nginx+Apache负载均衡及动静分离

使用nginx+Apache负载均衡及动静分离 介绍    LB负载均衡集群分两类: LVS (四层)和 nginx或haproxy (七层)    客户端都是通过访问分发器的VIP来访问网站 在七层中的网站页面有: .php .html .png .jpeg .jsp 等, 有动态页面有静态页面. 需要在应用层基于不同的应用进行分发. 一:实验拓扑图:     二:实验目标 实战:使用Apache+nginx实现动静分离的负载均衡集群 三:实验环境 主机作用分类 主机名 IP地址 安装软件 N

nginx源码分析--nginx模块解析

nginx的模块非常之多,可以认为所有代码都是以模块的形式组织,这包括核心模块和功能模块,针对不同的应用场合,并非所有的功能模块都要被用到,附录A给出的是默认configure(即简单的http服务器应用)下被连接的模块,这里虽说是模块连接,但nginx不会像apache或lighttpd那样在编译时生成so动态库而在程序执行时再进行动态加载,nginx模块源文件会在生成nginx时就直接被编译到其二进制执行文件中,所以如果要选用不同的功能模块,必须对nginx做重新配置和编译.对于功能模块的选

linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3(Linux version 2.6.32-279.el6.x86_64) gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) 本次配置 Nginx 1.5.8 Apache 2.4.7 php 5.3.26 目的 构造WEB前端技术架构.web前端的部署结构技术全然

Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)

在 nginx 中,proxy 用来实现反向代理,upstream 用来实现负载均衡. 例如有两台服务器,nginx 服务器作为代理服务器,执行 .html 文件,apache 服务器上执行 .php 文件,客户端发来的请求首先发送给 nginx 服务器,如果发送请求的是 .php 文件,则把请求通过 proxy pass 转发给 apache 服务器,apache 服务器处理后把结果返回给 nginx 服务器,nginx 服务再把结果返回给客户端.该例中 nginx 服务器实现了反向代理,或者

nginx&apache比较

1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃,各种高性能模块出品迅速啊 apache 相对于nginx 的优点:  rewrite ,比nginx 的rewrite 强大  动态页面 模块超多,基本想到的都可以找到 少bug ,nginx 的bug 相对较多 超稳定 存在

nginx+apache+php+mysql服务器集群搭建

nginx+apache+php+mysql服务器集群搭建 由于需要搭建了一个基本的服务器集群.具体的配置方案先不说了,到有时间的时候再介绍.下面介绍下整个方案的优点. 我总共准备了四台阿里云的主机,架设分别是A,B1,B2,C,A在集群的最前面,B1和B2在A的后面,C在最后面.A主要用的nginx,用nginx做反向代理的功能实在是强大.nginx把来自80的http请求都转发到B1和B2上,B1和B2主要是两台apache,用于php解析.B1和B2来连接C上的mysql.A上的nginx