文档章节

nginx +php-fpm 发挥更大的php作用

bengozhong
 bengozhong
发布于 2015/12/31 17:43
字数 1082
阅读 131
收藏 6
点赞 0
评论 0

简介 编辑

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)对于PHP 5.3.3之前的php来说,是一个补丁包 [1]   ,旨在将FastCGI进程管理整合进PHP包中。如果你使用的是PHP5.3.3之前的PHP的话,就必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
从PHP 5.4 RC2开始,php-fpm已经转正了,不再被php团队标注为 EXPERIMENTAL(实验性的东西) [2-3]   。
相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP 进程管理方式,可以有效控制内存和进程、可以平滑 重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/ php/sbin/php-fpm{start|stop|quit|restart|reload| logrotate}
--start 启动php的 fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启 php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件

特色功能 编辑

所有这些特性都是“不打断”的方式实现的。也就是说,如果你不使用它们,它们的存在不会影响 php的功能性——他们都是“透明”的。
Error header
范围:php.ini 选项
分类:便利性
默认情况下,如果被访问的php脚本包含语法错误,用户会收到一个空的“200 ok”页。这是不方便的。Error header 这个php.ini 选项允许在这种情况下产生一个 HTTP 错误码,比如“HTTP/1.0 550 Server Made Big Boo”,从而中断web server请求并显示一个正确的错误页。
如果要实现这样的功能,需要在 php.ini 中添加一条 fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"
在php-5.2.4 中添加了类似,但不相同的功能:如果被访问的php脚本包含语法错误,并且 display_errors = off,会立刻返回“HTTP/1.0 500 Internal Server Error”。
如果你需要设定一个 503错误,或者想要使这个行为独立于 display_errors 的设置,那么可以使用fastcgi.error_header。如果你在php-5.2.5 或以上版本上启用 php-fpm,那么fastcgi.error_header的优先级更高。
优化的上传支持
实质:web server 支持
类型:优化
这个特性正如名字那样,可以加速对大 POST 请求的处理速度,包括文件上传。优化是通过将请求体已写入一个临时文件,然后fastcgi协议传递文件名而不是请求体到来实现的。只有 nginx0.5.9 以上才支持这个功能。显然,这种模式只在php和 web server 在一台机器上的时候才能用。
nginx 样例配置:
location ~ \.php$ {
fastcgi_pass_request_body off;
client_body_in_file_only clean;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
...
fastcgi_pass ...;
}
在php中不需要配置任何东西。如果php收到了参数REQUEST_BODY_FILE,就读取其中的请求体,如果没有,就自行从fastcgi协议中读取请求体。
结合这个特性,可以考虑对 临时文件使用内存文件系统,例如tmpfs(linux):
client_body_temp_path /dev/shm/client_body_temp;
fastcgi_finish_request()
范围:php函数
类型:优化
这个特性可以提高一些php请求的处理速度。如果有些处理可以在页面生成 完后进行,就可以使用这种优化。比如,在 memcached 中保存 session 就可以在页面交给 web server 后进行。fastcgi_finisth_request() ,这一特性可以结束响应输出,web server 可以立即开始交给等不及的客户端,而此刻,php可以在请求的上下文环境中处理许多事情。比如保存session,转换上传的视频,处理统计等等。
fastcgi_finisth_request() 会触发 shutdown 函数运行。
request_slowlog_timeout
范围:php-fpm.conf 选项
分类: 方便
这个选项能让你跟踪执行缓慢的脚本并把他们连同调用栈一起记录在日志文件中。例如如下设置:
<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">logs/slow.log</value>
正如你再例子中看到的,脚本运行了 5 秒以上,并很可能是由于 mysql 响应慢造成的(top backtrace)

© 著作权归作者所有

共有 人打赏支持
bengozhong
粉丝 16
博文 414
码字总数 425526
作品 0
深圳
程序员
正确设置nginx/php-fpm/apache权限 提高网站安全性 防止被挂木马

核心总结:php-fpm/apache 进程所使用的用户,不能是网站文件所有者。 凡是违背这个原则,则不符合最小权限原则。 根据生产环境不断反馈,发现不断有 php网站被挂木马,绝大部分原因是因为权...

bengozhong ⋅ 2016/02/25 ⋅ 0

正确设置php-fpm和nginx防止网站被黑

核心总结:php-fpm 子进程所使用的用户,不能是网站文件所有者。 凡是违背这个原则,则不符合最小权限原则。 根据生产环境不断反馈,发现不断有 php网站被挂木马,绝大部分原因是因为权限设置...

kisshua ⋅ 2012/06/13 ⋅ 4

一次架构失误的反思

我们公司的系统要做改造,以前是1台服务器,现在要换成4台服务器,我去的时候,运维已经把架构方案那些,都弄好了,都已经在测试了,大概架构如下: 请注意,这个和我们传统的架构是有区别的,...

zchd ⋅ 2016/08/15 ⋅ 0

Nginx 能否能在处理一个请求的同时触发某种动作?

在 Nginx + PHP-FPM 的配置中,我想实现 HTTP 表单上传文件的进度。思路是这样的: 1. 文件提交到upload.php,Nginx在发送这个请求到后端的PHP-FPM服务器的同时,把请求的HTTP头发送到upinf...

heiing ⋅ 2013/02/24 ⋅ 6

php如何通过php-fpm和nginx一起协调愉快的工作

nginx 是一个代理服务器,其作用是把客户端请求转发给服务,然后直接输出服务的响应内容。 php 作为非常通用的web 服务端脚本语言,具有非常高性能的处理速度。 现在最流行的web服务器搭建环...

kubei ⋅ 2016/08/01 ⋅ 0

nginx错误总结

Nginx 502 Bad Gateway错误触发条件与解决方法 一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是从Google搜集整理的一些Nginx 502错误的排查方...

五大三粗 ⋅ 2015/05/21 ⋅ 0

ubuntu安装nginx+php-fpm+mysql

1、 安装 Nginx apt-get install nginx 启动Nginx服务: service nginx start 浏览器输入网址看看是否正常:http://192.168.1.208(修改成你设置的静态IP) 网页显示”Welcome to nginx!”说...

贪睡猫仙mosen ⋅ 2014/06/16 ⋅ 0

nginx 中fastcgi_pass监听unix socket和tcp socket的区别

Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP Socket,一种是UNIX Domain Socket. 其中TCP Socket是IP加端口,nginx默认的通信方式,可以跨服务器,非常适合做负载均衡.而UNIX Domain Socke...

hiwill ⋅ 2016/07/24 ⋅ 0

nginx防止后门程序跳转跨目录

nginx没有像apche open_basedir限制脚本的目录 如果多人共同使用 可以很容易被跨目录 可以用php-fpm的端口来限制脚本跳转 参考网上方法 比如 itxti.net这个用9002端口 location ~ .php$ { }...

阿唐 ⋅ 2013/12/17 ⋅ 0

手把手教你在centos下编译安装配置高性能web服务器环境nginx+php(fast-cg...

本文为实战操作过程的全程记录,采用一台新创建的linode vps(512M内存)环境,操作系统采用centos 6.2,以从源码编译的方式安装配置nginx, php(fast-cgi模式)web环境。 我们的目标:配置一台高...

fengyqf ⋅ 2012/07/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 57分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部