php-fpm监听socket类型-解决Connection refused

2024-05-01 22:58

本文主要是介绍php-fpm监听socket类型-解决Connection refused,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:
php-fpm的工作模式和nginx类似,都是一个master,多个worker模型。每个worker都在accept本pool内的监听套接字(linux已不存在惊群现象)。
一.背景:
在开发中碰到一个问题,项目以nginx+php-fpm形式访问交互,结果访问项目时报错如下图:

二.分析:
提示很明确嘛,去看error.log(在nginx.conf或者vhost里头配置的,找到你对应路径即可)
错误信息如下:
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"

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, server: www.lnmp.org, request: "GET /index.php?uri=look/index HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi.sock:", host: "local.helios.com"

关于问题: connect() failed (111: Connection refused) while connecting to upstream网上也有很多描述了,
1.php-fpm是否运行
ps aux |grep php-fpm //查看是否启动
/etc/init.d/php-fpm   或  /usr/local/php/sbin/php-fpm  //启动php-fpm
2.php-fpm队列是否足够
cat /proc/meminfo -u //查看内存大,一个php-fpm平均进程占用20MB,1G / 30MB = 33个
vi /usr/local/php/etc/php-fpm.conf  //查看配置文件中 pm.max_children
pm.max_children = 33 //改成上边的个数,但是最好留些余地别饱和运行
3.php-fpm.conf与fastcgi.conf的监听是否相同
1).查看php-fpm监听方式:
vim /usr/local/php/etc/php-fpm.conf
listen = 127.0.0.1:9000 //【ip+port形式】
;listen = /tmp/php-cgi.sock
2).查看nginx指定与php-fpm通信方式:
vi /usr/local/nginx/conf/vhost/vhost.conf
location ~\.php$ {fastcgi_pass unix:/tmp/php-cgi.sock;【unxi domain socket形式】fastcgi_index index.php;include fastcgi_params;        fastcgi_param  SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
三. 解决:
根据上边配置显示,情况已经很明显了,本次问题属于第三种情况,
我的php-fpm用ip:port方式建立链接,
nginx却用unix socket 方式建立链接
这是两种不同方式,好比暗号不同,怎么可能接上头嘛!

修改操作如下:
用哪种取决于你的PHP-FPM配置:,以下二选一即可。
方式1,统一成ip+port的形式:
php-fpm.conf: 
listen = 127.0.0.1:9000
vhost.conf: 
fastcgi_pass 127.0.0.1:9000;

方式2,统一成.sock的形式:
php-fpm.conf: 
listen = /tmp/php-fpm.sock
vhost.conf:
fastcgi_pass unix:/tmp/php-fpm.sock;
重启nginx与php-fpm
/etc/init.d/nginx reload
/etc/init.d/php-fpm reload

搞定,访问再试试。

其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使

四.知识延伸:
上边问题说到了是因为nginx与php-fpm进程通信不匹配造成的,那他们有什么不同呢?
Nginx和PHP-FPM的进程间通信有两种方式:
1. TCP Socket:网络地址进行寻址和访问的套接字【ip:port】
2. UNIX Domain Socket:文件系统进行寻址和访问的套接字【.sock文件】
其中TCP是IP+Port端口,可以跨服务器,而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.


.sock 文件 就是以  .sock  为后缀的文件而已。UNIX 系统不以后缀区分文件类型,但为了方便,通常使用后缀来标识一下。 .sock  文件极有可能是  UNIX 域套接字 (UNIX domain socket),即通过文件系统(而非网络地址)进行寻址和访问的套接字。参见 man 手册 unix(7)(命令: man 7 unix )。

wiki的解释: https://en.wikipedia.org/wiki/Unix_domain_socket
Unix domain socket: http://en.wikipedia.org/wiki/Unix_domain_socket
Tcp socket: http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html
区别:https://serverfault.com/questions/124517/whats-the-difference-between-unix-socket-and-tcp-ip-socket

本文地址: http://blog.csdn.net/ty_hf/article/details/78483057



这篇关于php-fpm监听socket类型-解决Connection refused的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952875

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使