概述
写这篇文章的是因为今天要Ubuntu下搭建LNMP环境,Nginx使用的是PHP-FPM,所以对Web服务器与PHP解释器的交互方式做了个整理。
众所周知,PHP是跨平台、跨服务器的语言,这也是它如此流行的原因之一。但是,很少有人知道PHP解释器可以以不同的方式运行在Web服务器中。PHP最常用的方式是以模块的方式(mod_php)运行在Apache中,也是Apache运行PHP的默认方式。但是在Nginx中,Nginx又使用的是PHP-FPM。
这篇文章就对这些概念做个介绍,如有不对的地方,请多多批评指教。
什么是PHP处理器(PHP handlers)?
首先需要记住的是,任何一种Web服务器(Apache、Nginx等)都是被设计成向用户发送html、图片等静态资源的,Web服务器自身并不能解释任何动态脚本(PHP、Python等)。PHP处理器就是用来解释Web应用中的PHP代码,并将它解释为HTML或其他静态资源,然后将解析的结果传给Web服务器,最后再由Web服务器发送给用户。大多数的Web服务器都不能解析PHP代码,因此它需要一个能解析PHP代码的程序,这就是PHP处理器。
mod_php
首先,来看一下以Apache模块方式运行PHP。mod_php现在在Linux各版本的软件仓库里都有,因此很容易被安装。
当PHP以模块的方式运行在Apache中时,PHP解释器被“内嵌”在Apache的进程里。Apache不会调用任何外部的PHP进程,因此这种方式使Apache与PHP能更好的通信。但是,当以这种方式运行PHP的时候,哪怕Apache提供的仅仅是静态的资源(如HTML),Apache的每个子进程也都会载入 mod_php,导致了比正常情况下更多的内存开销。
以这种方式运行的另一个缺点是,它仅能与Apache一起配合工作。另外,在小型的VPS和大型的网站中,这种方式也不合适,因为大型网站可能有很多静态资源,而这些静态资源是不需要PHP程序解释的。
优点:
1.易于安装和更新
2.容配置
缺点:
1.仅能与Apache一起工作
2.增加了Apache子进程内存开销
3.当更改php.ini文件后,需要重启Apache
FastCGI
FastCGI是交互程序与Web服务器通用的协议接口,是早期CGI(Common Gateway Interface)的一个变种。相对于CGI来说,FastCGI减少了和Web服务器交互的开销,同时一次可以处理更多的请求。
Apache可以以mod_fcgid的形式使用FastCGI。其他Web服务器,如lighttpd, nginx, Cherokee,甚至微软的IIS也都能使用FastCGI。使用FastCGI,可以同时设置多个版本的PHP,这在某些情况下非常有用。
FastCGI还利用suexec来支持不同的用户用自己的PHP的实例。这个特性对于在共享环境下提高安全性尤其重要。FastCGI在保证性能的同时,也减少了Web服务器的内存开销。
优点:
1.兼容多数Web服务器
2.比mod_php占内存小
3.更多的配置项,包括多版本PHP和suexec
缺点
1.配置复杂
2.不被大家所熟知
PHP-FPM(FastCGI Process Manager)
PHP-FPM是Web服务器使用PHP的一种最新方式,也是PHP FastCGI的另外一种实现。PHP-FPM对于运行在小型VPS和多服务器上的Web应用非常应用。同时,它也可以被兼容FastCGI的任何Web服务器所使用。
PHP-FPM使管理员能够优雅地停止和启动PHP工作进程而不丢失任何查询。这允许我们逐步更新配置和二进制,而不会损失任何查询。它还允许我们在发生任何意外破坏的情况下,紧急重启进程。
优点:
1.兼容多数Web服务器
2.比mod_php占内存小
3.更多的配置项,包括多版本PHP和suexec
缺点
1.配置复杂
2.不被大家所熟知
补充:Apache运行PHP的四种方式
mod_php (DSO,Dynamic Shared Object)
CGI
suPHP
FastCGI
总结
内容相对抽象,理解的不深,记录下留作以后参考~:)
我想在机器上用docker设置一个完整的LNMP环境。但是分离的php fpm有一些问题 我所做的是: > 从docker.io拉取图像: docker pull php:7.1-fpm docker pull nginx 运行图像: docker run-d——名称php fpm-v/data/docker/php fpm/configs/:/usr/local/etc/php fpm。d-v/
PHP-FPM 是一个 PHP FastCGI 进程管理器。 FastCGI 是一个可伸缩的,高速地在web server和脚本语言间交互的接口。FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。 PHP-FPM 可以和任何支持远端 FastCGI 的 web server 工作。
我已经对Apache2进行了设置。4 FastCgi、PHP-FPM、SuExec,无需SuExec即可正常工作。但当我启用Suexec时,它的给我文件不存在错误(当我访问php脚本时,浏览器中出现404未找到错误)。 注意:当我关闭“FastCgiWrapper”时,PHP脚本可以通过PHP-FPM工作,但当我打开它时,会出现404错误。 Apache错误日志(最后一行): 配置: /etc/a
运行Nginx 1.17的Digital Ocean Ubuntu18.04 VPS。10 PHP-FPM7.3。我不知道如何正确运行PHP文件(其他一切都正常运行)php文件生成Nginx的404未找到页面。Nginx错误日志仅显示“信号处理已启动”每次更改后,我都会重新启动nginx fpm。我已经研究了几乎所有与此相关的StackOverflow问题,并尝试了各种不同的配置。如果您能提供任何
我正在尝试使用Apache2.2和PHP-FPM mod_fcgi设置获得一个基本的CakePHP 2.4应用程序设置,我遇到了内部重定向问题,我似乎无法解决。 apache只有所需的模块加载和基本设置 PHP Fastcgi进程设置如下所示 使用默认的CakePHP 2.4分支,我得到以下错误 我已经尝试了几乎每一个建议和技巧,我可以找到的蛋糕重定向问题,但它似乎归结为php-fpm设置 我的重
如果网站要写入某个目录,在我们搭建的环境里,你要确保运行 PHP-FPM 的用户对这个要写入的目录拥有写入权限。一般目录的拥有者对目录都有可以写入的权限。我们可以把运行 PHP-FPM 的用户修改成跟运行 NGINX 一样的用户,这样更好记一些。 先查看一下进程,看看运行 NGINX 的用户叫什么: ps aux | grep nginx 显示,运行 nginx: worker process
本文向大家介绍php以fastCGI的方式运行时文件系统权限问题及解决方法,包括了php以fastCGI的方式运行时文件系统权限问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 今天准备将一个php demo放在IIS下运行,网站在IIS下的配置是这样的: 应用程序池是集成模式下的.net framework 2.0(2.0或4.0没什么关系,因为php以fastCGI的方式在跑), 应用程
本文向大家介绍PHP 5.3和PHP 5.4出现FastCGI Error解决方法,包括了PHP 5.3和PHP 5.4出现FastCGI Error解决方法的使用技巧和注意事项,需要的朋友参考一下 不少童鞋在配置完PHP 5.3或者PHP 5.4网站源码后打开出错,提示 也有不少客户出现这个问题,其实很好解决,安装个Visual C++ 2008 SP1 Redistributable(x86)