php-fpm

502 VS 504

你说的曾经没有我的故事 提交于 2020-01-08 23:35:09
本文同时发表在 https://github.com/zhangyachen/zhangyachen.github.io/issues/89 首先看一下概念: 502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。  注意:某些代理服务器在DNS查询超时时会返回400或者500错误。 通俗的来说,nginx作为一个代理服务器,将请求转发到其他服务器或者php-cgi来处理,当nginx收到了无法理解的响应时,就返回502。当nginx超过自己配置的超时时间还没有收到请求时,就返回504错误。 502 上面说到nginx收到了无法理解的响应,什么是无法理解的响应呢? nginx无法与php-fpm进行连接。 nginx在连接php-fpm一段时间后发现与php-fpm的连接被断开。 那么什么时候会出现上面的情况呢? php-fpm没有启动,nginx无法将请求交给php-fpm php-fpm运行脚本超时,php-fpm终止了脚本的执行和执行脚本的Worker进程,nginx发现自己与php-fpm的连接断开。 我们逐一实验上述的情况: php-fpm没有启动 我们关闭php-fpm。

转:nginx和php-fpm的两种通信方式

烂漫一生 提交于 2020-01-08 10:26:54
原文地址:https://segmentfault.com/q/1010000004854045 Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket. 其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置: 方式1: php-fpm.conf: listen = 127.0.0.1:9000 nginx.conf: fastcgi_pass 127.0.0.1:9000; 方式2: php-fpm.conf: listen = /tmp/php-fpm.sock nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock; 其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----. UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题

php-fpm运行原理

做~自己de王妃 提交于 2020-01-07 02:14:44
来源: https://blog.csdn.net/sinat_38804294/article/details/94393621 一、php-fpm由来 1.cgi (common gateway interface 公共网关接口)是一种协议,也是一种程序 它是为了保证web server传递过来的数据是标准格式,方便cgi程序的编写者。 web server网站服务器只是内容的分发者(比如nginx)。如果请求/index.html,那么nginx会去文件系统中找到这个文件,发送给浏览器。这里分发的是静态数据。如果请求/index.php,根据配置文件,nginx知道这不是一个静态文件,需要去找php解析器来处理,那么nginx就会把这个请求简单处理交给php解析器。但是nginx传递给php解析器什么呢?url、查询字符串、post数据、header?这时候cgi就出来了,cgi就是规定了要传那些数据并以什么格式传递给后方处理这个请求的协议。 当web server 收到/index.php请求后,会启动对应的cgi程序,这里就是php的解析器。接下来php解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以cgi规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。 2.fastcgi用来提高cgi程序性能的 cgi是个协议

部署nginx后无法访问数据库,查看www-error.log日志报错Class 'mysqli' not found in /usr/local/nginx/html/mysql.php on line 2

↘锁芯ラ 提交于 2020-01-07 02:00:13
检查你的php-mysql包是否安装 [root@localhost nginx]# rpm -qa php-mysql 没有任何输出则没有安装,接下来用yum安装php-mysql yum -y install php-mysql 重启php-fpm再验证 systemctl restart php-fpm 来源: https://www.cnblogs.com/guarding/p/12150061.html

某个应用的CPU使用率居然达到100%,我该怎么办?

好久不见. 提交于 2020-01-06 18:58:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文是通过学习极客时间专栏《Linux性能优化实战》05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办? CPU 使用率 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。 节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等。不同的系统可能设置不同数值,你可以通过查询 /boot/config 内核选项来查看它的配置值。比如在我的系统中,节拍率设置成了 250,也就是每秒钟触发 250 次时间中断。 $ grep 'CONFIG_HZ=' /boot/config-$(uname -r) CONFIG_HZ=250 同时,正因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问。为了方便用户空间程序,内核还提供了一个用户空间节拍率 USER_HZ,它总是固定为 100,也就是 1/100 秒。这样,用户空间程序并不需要关心内核中 HZ 被设置成了多少,因为它看到的总是固定值 USER_HZ。 Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的

CGI、FastCGI和php-fpm的区别

瘦欲@ 提交于 2020-01-05 10:09:21
参考网上的描述,将网上的描述内容,整理进来: 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。 web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header不能少吧,好的,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想,你在PHP代码中使用的用户从哪里来的。 当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。 好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。 提高性能,那么CGI程序的性能问题在哪呢?

了解Nginx与PHP的交互?

霸气de小男生 提交于 2020-01-05 08:37:08
Nginx可以接收请求并转发给PHP-FPM。 1.开始深入Nginx与FastCGI协议 通过对Nginx新增Server配置实现了nginx与PHP的一次通信,配置文件非常简单。 从上图的Nginx配置中可以注意到 fastcgi* 开头的一些配置,以及引入的 fastcgi.conf 文件。其实在fastcgi.conf中,也是一堆fastcgi*的配置项,只是这些配置项相对不常变,通常单独文件保管可以在多处引用。 CGI是通用网关协议,FastCGI则是一种常住进程的CGI模式程序。 PHP-FPM的全称是PHP FastCGI Process Manager,即PHP-FPM会通过用户配置来管理一批FastCGI进程。 例如:在PHP-FPM管理下的某个FastCGI进程挂了,PHP-FPM会根据用户配置来看是否要重启补全,PHP-FPM更像是管理器,而真正衔接Nginx与PHP的则是FastCGI进程。 介绍FastCGI在请求流中的位置,如下图所示: 如上图所示,FastCGI的下游, 是CGI-APP ,在我们的LNMP架构里,这个 CGI-APP就是PHP程序 。而 FastCGI的上游是Nginx ,他们之间有 一个通信载体 ,即图中的 socket 。fastcgi_pass也常配置为一个http接口地址。 图中的Pre-fork ,则对应着我们 PHP

CGI、FastCGI和PHP-FPM关系详解

馋奶兔 提交于 2020-01-05 08:36:25
在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们 一知半解 ,很难搭建出高性能的服务器。接下来我们就以图形方式,解释这些概念之间的关系。 基础 在整个网站架构中,Web Server(如Apache)只是内容的分发者。举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。 如果请求的是 index.php,根据配置文件,Web Server知道这个不是静态文件,需要去找 PHP 解析器来处理,那么他会把这个请求简单处理,然后交给PHP解析器。 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。这就是一个完整的动态PHP Web访问流程,接下来再引出这些概念,就好理解多了, CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。 FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。 PHP-CGI

FastCGI与PHP-FPM

筅森魡賤 提交于 2020-01-05 08:36:07
要想弄清FastCGI和PHP-FPM,就需要先弄清一些基本的概念: CGI FastCGI PHP-FPM PHP-CGI 。 CGI 通用网关接口,描述的服务器和请求处理程序之间的数据传输的一种标准。 这可以简单的理解为 CGI 就是保证 web server 传过来的数据是标准的,能够方便的请求处理程序的编写。 在这一层面之上, web server 只是请求内容的分发者。比如,如果请求 index.html ,那么 web server 会去文件系统中查找这个文件,然后发送到浏览器,那么这里分发的就是静态资源。如果这个时候请求的不是 index.html 而是 index.php 的话,根据 web server (比如 nginx )的配置文件, server 判断出此次请求的不是静态文件,而是一个PHP的程序,需要去找PHP解析器来处理,那么server会简单处理这个请求后交给PHP解析器。 Nginx 会将请求的 URL 、 GET/POST数据 、 HTTP Header 等协议规定好的数据传递到处理请求的 CGI程序 中。 让我们在具体一点的分析。当 server 收到 index.php 这个请求后, server 会启动对应的CGI程序,本文中指的就是PHP的解析器。接下来PHP解析器会解析配置文件 php.ini ,初始化运行环境,然后处理请求

nginx和php-fpm调用方式

≯℡__Kan透↙ 提交于 2020-01-05 08:35:55
nginx和php-fpm调用方式 一.背景: 在开发中碰到一个问题,项目以nginx+php-fpm形式访问交互,结果访问项目时报错如下图: 二.分析: 提示很明确嘛,去看error.log(在nginx.conf或者vhost里头配置的,找到你对应路径即可) 错误信息如下: 1 2 3 2017/09/18 10:46:21 [error] 3880#0: *92 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.33.10, server: local.helios.com, request: "GET /v1/room/detail.json HTTP/1.1" , upstream: "fastcgi://127.0.0.1:9000" , host: "local.helios.com" 或 1 2 3 2017 /09/18 14:30:42 [crit] 5375 #0: *43 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.33.10,