我有一个带目录结构的简单项目
我正在为我的drupal网站设置nginx配置,对于fastcgi_pass
我一直在使用127.0.0.1:9000
,但我想使用这个conf中建议的unix套接字:
# PHP 7 socket location.
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
但我找不到php/php7.0-fpm.sock;
我的centos发行版中有以下路径
/var/run/php-fpm/php-fpm.pid
答案 0 :(得分:18)
检查 php-fpm 配置,其中将使用以下命令创建套接字:
$ cat /etc/php/7.0/fpm/pool.d/www.conf
查找listen
,例如:
listen = /run/php/php7.0-fpm.sock
php-fpm 在启动进程后创建套接字文件。
sudo service php7.0-fpm stop
sudo service php7.0-fpm start
检查目录是否创建了套接字文件:
$ cd /run/php && ls -la
答案 1 :(得分:9)
首先检查php-fpm
是否在系统上运行,为此,您可以使用pgrep
,例如:
# pgrep -fa php-fpm
5666 php-fpm: master process (/etc/php-fpm.conf)
5667 php-fpm: pool www
5668 php-fpm: pool www
5669 php-fpm: pool www
5670 php-fpm: pool www
5671 php-fpm: pool www
在这种情况下,它显示已启动并正在运行并且正在使用配置文件/etc/php-fpm.conf
。在检查配置文件并尝试检查listen =
指令之前,您可以快速查看/proc/net/unix
,例如:
# grep php /proc/net/unix
可能返回以下内容:
ffff8800bfb2f400: 00000002 00000000 00010000 0001 01 28561 /tmp/php-fpm.sock
在这种情况下,它表明php-fpm套接字的路径位于/tmp/php-fpm.sock
中,可以通过检查/etc/php-fpm.d/www.conf
中的conf来验证该路径,在这种情况下为:{{1} }
如果未得到任何结果并且listen= /tmp/php-fpm.sock
已启动并正在运行,则通过检查配置可以发现它是通过在TCP套接字上列出来使用默认设置的:
php-fpm
您可以更改某些内容以在Unix套接字上进行监听,例如建议的conf:
listen = 127.0.0.1:9000
在某些Linux发行版中,通常会使用:
listen = /var/run/php/php7.0-fpm.sock
修改配置后,不要忘记重启服务listen.owner = www-data
listen.group = www-data
listen.mode = 0660
。要检查套接字是否已创建,您可以执行以下操作:
systemctl restart php-fpm
如果存在套接字,则应打印出以下内容:
$ file /var/run/php/php7.0-fpm.sock
答案 2 :(得分:2)
您可以通过运行
看到它$ ss --unix |grep 'php'
答案 3 :(得分:0)
很可能安装了较旧的libpcre3并满足了php7.0软件包中的依赖关系,但只有较新的库软件包才提供pcre_jit_stack_free。
在这种情况下,请执行apt-get install libpcre3安装,您就很好了。
参考号:https://github.com/oerdnj/deb.sury.org/issues/372
希望对您有帮助。
答案 4 :(得分:0)
使用此功能:
cat /etc/php/7.0/fpm/pool.d/www.conf | grep 'listen ='
输出示例:监听= /run/php/php7.2-fpm.sock
或者对于通用php版本:
cat /etc/php/$(php -r "echo PHP_VERSION;" | grep --only-matching --perl-regexp "7.\d+")/fpm/pool.d/www.conf | grep 'listen ='