php-fpm监听socket类型-解决Connection refused
Posted 时而宁靜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
linux的php-fpm的pool慢执行日志进程管理及open_basedir介绍