nginx之fastcgi和PHP的PHP-FPM
php-fpm:PHP fastcgi进程管理器
php-fpm的工作模式:1个master进程、多个worker进程(在PHP中worker进程就是php-cgi进程),php-cgi是PHP的解释器
master进程和worker进程的工作:
master进程负责初始化环境变量、加载PHP配置文件。
worker进程负责解析PHP脚本,把PHP的脚本执行结果php-fpm的master进程,
php-fpm的master进程把结果给nginx的结果。
php-fpm.conf配置文件配置项
listen =unix:/tmp/php-cgi.sock
pid = /app/logs/php-fpm.pid (php-fpm的进程ID存储位置)
error_log = /app/logs/php-fpm.logs(PHP-FPM的出错日志)
log_level = error (日志的级别)
rlimit_files = 32768 (文件描述符的设置)
events_machanism = epoll (事件模型)
listen.owner = nginx (进程使用的用户)
listen.group = nginx (进程使用的用户组)
pm = dynamic
pm.max_children = 1024 (允许最大的子进程数)
pm.start_servers = 16 (启动的进程数)
pm.min_spare_servers = 5 (最小空闲进程数)(动态模式生效)
pm.max_spare_servers = 20 (最大空闲进程数)(动态模式生效)
pm.process_idle_timeout = 15s (空闲的进程多少被杀掉)(ondemand)
pm.max_requests = 2048 (一个php-fpm的worker进程处理的请求数量,处理到这个么多进程后,
这个php-fpm的worker进程会重新启动,为什么会重新启动,因为有可能worker进程存在内存泄漏的问题)
php-fpm进程启动模式,pm可以设置为static、dynamic、ondemand
static:子进程(子进程又叫做php-fpm的worker进程)自始至终是pm.max_children制定的数量,
pm.start_servers、php.min-spare_servers、pm.max_spare_servers配置将没有作用。
如果设置成dynamic,则进程是动态的,最开始是pm.start_servers制定的数量,如果请求较多,则会自动增加,但不
超过pm.max_children制定的进程数量,
同时保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。
当php-fpm启动后,一个php-cgi进程约占用3M内存,但是当他们处理过一些请求后,有些内存是释放不掉的,
占用的内存能达到20M-------30M不等。
对于内存比较吃紧的,同时并发量不是很大的应用,可以考虑采用static的处理方式,这样可以很好的控制php-fpm的所消耗的总内存,让系统更加
平稳运行。另外由于并发量很小,可以适当的把设置pm.max_requests小一些,以便让php-fpm进程有机会重启,从而释放其占用的内存。
nginx 如何和php-fpm通信
nginx 可以通通过TCP方式或者unix套接字的方式和php-fpm通信
TCP方式和Unix domain socket的区别?????
TCP方式多了网络层、数据链路层、物理层可能会慢,但是通过TCP方式可以把nginx和php-fpm部署到不同的服务器上,
unix domain socket 是通过socket的方式在进程间通信。这样就要求nginx和php-fpm在部署在一个服务器上。
可以通过nginx的fastcig模块
location ~ [^/].php(/|$)
{
fastcgi_pass unix:/tpm/php-cgi.sock; (fastcgi_pass的值需要和php-fpm配置文件中的listen选项的值一样)
fastcgi_index index.php;
#fastcgi_pass SCRIPT_FILENAME $document_root$fastcgi_script_name;
#include fastcgi_params;(如果只有这一行不加上上面一行的话,如果请求PHP孙然会请求成功,HTTP status code 200,但是页面为空)
include fastcgi.conf; #只用包含fastcgi.conf 就行了,上面两行就可以省略了。
}
nginx之CGI
fastcgi.cong 和fastcgi_params的区别:
原本nginx的conf配置目录,没有fastcgi.conf配置文件,只有fastcgi_param配置文件,fastcgi.conf是
在 nginx 0.8.30版本才引入的。
主要是解决以下问题。
原本nginx只有fastcgi_param,后来发现很多人在nginx.conf定义SCRIPT_FILENAME时使用了硬编码的方式。
例如,fastcgi_param SCRIPT_FILENAME /var/wwww/foo$fastcgi_script_name.
于是为了规范用法引入了fastcgi.conf配置文件。
nginx之fastcgi和PHP的PHP-FPM的更多相关文章
- nginx、fastCGI、php-fpm关系梳理(转)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- etrace跟踪Nginx代码+ FASTCGI
http://blog.csdn.net/jianqiangchen/article/details/29175285 http://blog.csdn.net/jianqiangchen/artic ...
- Nginx中FastCGI配置优化
FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器 ...
- Nginx + CGI/FastCGI + C/Cpp
接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...
- nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装 php-fpm扩展并启动php-fpm守护进程, ...
- 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...
- nginx、fastCGI、php-fpm关系梳理(转载参考)
nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html 前言: Linux下搭建nginx+php ...
- Linux上配置Nginx+PHP5(FastCGI)
原为地址:http://www.laruence.com/2009/07/28/1030.html Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时 ...
- nginx、fastCGI、php-fpm关系梳理
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- Nginx 中 FastCGI 配置示例
nginx 中 FastCGI 参数:主要是在 http 层 :保证PHP环境的高校运行 主要对PHP用来解析 fastcgi_cache_path /tmp/fastcgi_cache levels ...
随机推荐
- 记一次性能优化,限制tcp_timewait数量,快速回收和重用
前言 这篇文章的主题是记录一次Python程序的性能优化,在优化的过程中遇到的问题,以及如何去解决的.为大家提供一个优化的思路,首先要声明的一点是,我的方式不是唯一的,大家在性能优化之路上遇到的问题都 ...
- 【Tomcat】Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
这个分为两个部分的系列文章研究了 Apache Tomcat 服务器的系统架构以及其运用的很多经典设计模式.第 1 部分 分析了 Tomcat 的工作原理,第 2 部分将分析 Tomcat 中运用的许 ...
- Goldengate OGG常见问题与错误列表
Goldengate OGG常见问题与错误列表 以下列出了OGG一些常见的问题与错误及其解答: Note: 966211.1 How To Resync A Single Table With ...
- layui table 前台数字格式保留两位小数,不足补0(mysql 数据库)
layui table 对于后台json数据,有数字的,默认不会原样显示,而是只取数值,即100.00显示为100.如果想原样显示,需转为字符串. 项目采用mysql数据库,字段类型为decimal( ...
- 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输
实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...
- 【原】关于AdaBoost的一些再思考
一.Decision Stumps: Decision Stumps称为单层分类器,主要用作Ensemble Method的组件(弱分类器).一般只进行一次判定,可以包含两个或者多个叶结点.对于离散数 ...
- 占位 Bootstrap
中文网 http://www.bootcss.com/
- 编译使用tensorflow c版本动态链接库
注意:如果是linux或mac os操作系统,可以参考https://www.tensorflow.org/install/install_c,直接下载对应的so库和头文件,然后跳到步骤4.如果不能使 ...
- QT QML 3D模型查看器
原文链接:http://amin-ahmadi.com/2018/01/28/viewing-3d-models-using-qt/ 本文使用QT Quick中的Scene3D QML类型来查看3D模 ...
- Http 调用netty 服务,服务调用客户端,伪同步响应.ProtoBuf 解决粘包,半包问题.
实际情况是: 公司需要开发一个接口给新产品使用,需求如下 1.有一款硬件设备,客户用usb接上电脑就可以,但是此设备功能比较单一,所以开发一个服务器程序,辅助此设备业务功能 2.解决方案,使用Sock ...