php-fpm

PHP-FPM 与 Nginx 的通信机制总结

半腔热情 提交于 2020-04-25 22:29:51
PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。 由于 CGI 的机制是每处理一个请求需要 fork 一个 CGI 进程,请求结束再kill掉这个进程,在实际应用上比较浪费资源,于是就出现了CGI 的改良版本 FastCGI,FastCGI 在请求处理完后,不会 kill 掉进程,而是继续处理多个请求,这样就大大提高了效率。 PHP-FPM 是什么 PHP-FPM 即 PHP-FastCGI Process Manager, 它是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种;master 进程只有一个,负责监听端口,接收来自服务器的请求,而 worker 进程则一般有多个(具体数量根据实际需要进行配置),每个进程内部都会嵌入一个 PHP 解释器,是代码真正执行的地方。 Nginx 与 php-fpm 通信机制 当我们访问一个网站(如 www.test.com)的时候,处理流程是这样的: www .test .com | | Nginx | | 路由到

PHP与nginx之间的运行机制及其原理

廉价感情. 提交于 2020-04-25 22:29:36
一、普及Nginx与Php-fpm相关知识点 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 Php-fpm是什么 1、cgi、fast-cgi协议 cgi的历史 早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。 webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢? 为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。 fast-cgi的改进 有了cgi协议,解决了php解释器与webserver通信的问题,webserver终于可以处理动态语言了。 但是,webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。 有没有发现很浪费资源? 于是,出现了cgi的改良版本,fast-cgi。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程

nginx如何调用PHP(nginx+php运行原理)

感情迁移 提交于 2020-04-25 22:29:09
采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是 需要动态执行php脚本 。本文的主要内容为如何在nginx server中正确配置php调 用方法,以及配置的基本原理。知道了配置和基本原理后,我们也就知道了他们之间是怎么通信的。 一、普及Nginx与Php-fpm相关知识点 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 Php-fpm是什么 1、cgi、fast-cgi协议 cgi的历史 早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。 webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢? 为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。 fast-cgi的改进 有了cgi协议,解决了php解释器与webserver通信的问题

PHP与Nginx之间的运行机制以及原理

强颜欢笑 提交于 2020-04-25 22:28:32
Nginx是 俄国人 最早开发的Webserver,现在已经风靡全球,相信大家并不陌生。PHP也通过二十多年的发展来到了7系列版本,更加关注性能。这对搭档在最近这些年, 叱咤风云 ,基本上LNMP成了当下的标配。可是,你用了这么多年的Nginx+PHP的搭配,你真正知道他们之间是怎么交互怎么通信的么? 一、普及Nginx与Php-fpm相关知识点 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 Php-fpm是什么 1、cgi、fast-cgi协议 cgi的历史 早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。 webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢? 为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。 fast-cgi的改进 有了cgi协议,解决了php解释器与webserver通信的问题,webserver终于可以处理动态语言了。 但是,webserver每收到一个请求

PHP错误日志和内存查看

浪尽此生 提交于 2020-04-24 02:06:22
本篇文章给大家带来的内容是关于PHP错误日志和内存查看的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1.通过命令查看服务器上一共开了多少的 php-cgi 进程: ps -fe |grep "php-fpm"|grep "pool"|wc -l 2.查看FPM在你的机子上的平均内存占用: ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' 3.指令ps找出消耗内存的元凶 ps -A --sort -rss -o comm,pmem,pcpu |uniq -c |head -15 PHP错误日志 vim /usr/local/php-5.6.5/etc/php.ini display_errors = On error_log = "/data/phplog/error_log" chmod a+w /data/phplog/error_log 开启PHP错误日志级别 ini_set("display_errors", On); ini_set("error_reporting", E_ALL); 来源: oschina 链接: https://my.oschina.net/u/4479011

第十七周

心已入冬 提交于 2020-04-22 00:44:41
1、部署分离的LAMP,部署到二台服务器上,php加载xcache模块 1、环境: 两台机器: 192.168.43.137 httpd php-fpm php-mysql 192.168.43.108 mariadb 2、137上安装httpd、 php-fpm 、php-mysql [root@ka2 conf.modules.d]#yum install httpd php-fpm php-mysql 3、创建session目录,确保运行php-fpm进程的用户对session目录有读写权限 [rot@ka2 conf.modules.d]#mkdir /var/lib/php/session [root@ka2 conf.modules.d]#chown apache.apache /var/lib/php/session 4、创建httpd的fcgi配置文件,将访问.php文件指定到具体目录 : [root@ka2 conf.modules.d]#vim /etc/httpd/conf.d/fcgi.conf DirectoryIndex index.php ProxyRequests Off ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 5、验证http是否支持fcgi [root

云服务器出现502错误怎么办

人盡茶涼 提交于 2020-04-21 20:34:46
云服务器出现502错误怎么办?当云服务器上面的网站出现502错误时,说明服务器作为网关或代理,从上游服务器收到无效响应。 出现502错误的原因分析 将请求提交给网关,如php-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。那么出现问题的地方便与网关服务如php-fpm的配置有关。max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误。可以通过netstat命令来查看当前连接数。 request_terminate_timeout 设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。 当积累了大量的php请求,此时重启php-fpm释放资源,但没有几分钟的时间,又再次出现502错误,为什么呢?此时我们还应考虑是否与云主机数据库有关,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。 出现502错误的解决方案 当网站出现502问题时,可以先通过以下两个步骤来解决: 查看当前的PHP FastCGI进程数是否够用netstat -anpo | grep “php-cgi”| wc -l 如果实际使用的

PHP项目采用多个Docker镜像的方式在Kubernets平台的部署范例

前提是你 提交于 2020-04-21 19:12:55
前言 组织的容器支持docker-compose部署,组织的容器支持kubernets部署。 以php框架thinkphp为示例,演示php项目的kubernets部署。 多容器方式(3容器)分别为: appphp(php代码),openresty(nginx webserver),php-fpm(php的运行环境) dockerfile 和 yaml文件 docker iamges仓库 PHP项目在Docker中如何部署运行? PHP应用的运行方式 PHP应用的运行方式一般有Apache mod_php 模式、Nginx(FastCgi)+PHP-FPM模式、Swoole常驻内存Daemon模式。 Docker单容器 Apache mod_php 模式和Swoole常驻内存Daemon模式本身就是单程序,那么在Docker中入口运行程序直接为应用程序即可。 Nginx(FastCgi)+PHP-FPM模式需要nginx和php-fpm 2个程序,这样Docker中就需要运行多个程序,需要有进程守护类软件来运行多个程序。 推荐使用s6-overlay Docker Hub中PHP官方镜像包已经包括Apache mod_php 模式的镜像包,Kubernets官方PHP项目实例GuestBook中就是采用这种模式的镜像包。 Docker多容器配合 Docker官方倡导容器单一职责

Nginx 虚拟主机 配置 支持独立urlwrite 文件, php-fpm独立用户和php....

夙愿已清 提交于 2020-04-17 02:28:39
【推荐阅读】微服务还能火多久?>>> Nginx 虚拟主机 环境配置。 最近租了台服务器,准备做一些网站。纠结apache/nginx很久,最后选定了Nginx+php-fpm。 因为可能会有几个站,为了安全,我希望每个站点直接都能尽量独立,避免互相影响。 主要实现功能: -能够相对快捷的添加虚拟主机。 -每个虚拟主机直接相对独立,避免一个网站有漏洞,全服务器手影响 -能够方便的配置urlrewrite,还是需要reload或restart ( 谁让nginx 不支持像 .htaccess 这样吗方便的东西呢?) -每个虚拟主机能独立配置php.ini 上面是废话,下面就是大概实现方法。 一、主要环境 CentOS 5.7, Nginx 1.06 PHP 5.2.17(php-fpm) 安装过程省略,我基本都是编译安装在 /usr/local/ 下面。 二、Web目录结构&权限 /home/$USER$/ 用户 |-- $DOMAIN$ 域名 |-- logs | |-- access.log 访问日志 | `-- .nginx 用户Nginx,可以定义urlrewrite 即使不需要也要创建,空内容,因为 nginx 配置文件中要include~。 `-- wwwroot 用户存放web文件 `-- index.html 权限: Home目录下的全部目录(除了用户后来创建的

PHP-FPM是个什么东西

孤街醉人 提交于 2020-04-16 14:53:03
【推荐阅读】微服务还能火多久?>>> 作用 PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。 PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。 (1). 为什么会出现php-fpm fpm的出现全部因为php-fastcgi出现。为了很好的管理php-fastcgi而实现的一个程序 (2). 什么是php-fastcgi php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理(因此才出现的php-fpm)。 (3)为什么不叫php-cgi 其实在php-fastcgi出现之前是有一个php-cgi存在的,只是它的执行效率低下,因此被php-fastcgi取代。 (4)那fastcgi和cgi有什么区别呢? 亲们,这区别就大了,当一个服务web-server(nginx)分发过来请求的时候,通过匹配后缀知道该请求是个动态的php请求,会把这个请求转给php。 在cgi的年代,思想比较保守,总是一个请求过来后,去读取php.ini里的基础配置信息,初始化执行环境,每次都要不停的去创建一个进程,读取配置,初始化环境,返回数据,退出进程,久而久之,启动进程的工作变的乏味无趣特别累。