Где находится php7.0-fpm.sock

У меня простой проект со структурой каталогов

Я настраиваю конфигурацию nginx для своего сайта drupal, а для fastcgi_pass я использую 127.0.0.1:9000, но я хочу использовать сокет 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

person hidar    schedule 26.06.2017    source источник


Ответы (5)


Проверьте конфигурацию 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

person BenRoob    schedule 26.06.2017
comment
Где находится в Убутну? - person Yasar Arafath; 19.08.2017
comment
Я вижу только файл php7.0-fpm.pid - person Yasar Arafath; 19.08.2017
comment
У меня несколько убунтусов. Путь по умолчанию (я его никогда не менял): /var/run/php/php7.0-fpm.sock. Но опять же, это зависит от значения конфигурации, и этот файл должен быть создан, если php-fpm запущен. - person BenRoob; 19.08.2017
comment
Но есть только один файл php7.0-fpm.pid - person Yasar Arafath; 19.08.2017
comment
Опять же: конфиг сообщает, где разместить файл сокета. Он должен присутствовать (создаваться службой), когда запущена служба php-fpm. - person BenRoob; 19.08.2017
comment
Конфигурация отображается как /run/php/php7.0-fpm.sock, но файла нет - person Yasar Arafath; 19.08.2017
comment
lol, я могу понять, почему Бен сдался! XD yasar ты правильно пришел? - person emotality; 22.03.2018
comment
У меня тоже только php7.0-fpm.pid (пробовал запустить sudo service php7.0-fpm start) - person vsync; 29.04.2018

Сначала проверьте, работает ли 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, который можно проверить, проверив conf в /etc/php-fpm.d/www.conf, в данном случае это: listen= /tmp/php-fpm.sock

Если вы не получили никакого результата и php-fpm запущен и работает, проверив конфигурацию, вы можете обнаружить, что используются значения по умолчанию, указав TCP-сокет:

listen = 127.0.0.1:9000

Что-то, что вы могли бы изменить, чтобы прослушивать сокет Unix, например, предложенный вами conf:

listen = /var/run/php/php7.0-fpm.sock

В некоторых дистрибутивах Linux обычно используется:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

После изменения конфигурации не забудьте перезапустить службы systemctl restart php-fpm. Чтобы убедиться, что сокет создан, вы можете:

$ file /var/run/php/php7.0-fpm.sock

Если сокет существует, следует распечатать что-то вроде этого:

/var/run/php/php7.0-fpm.sock: socket
person nbari    schedule 01.08.2018
comment
Чтобы все было правильно и ясно, в чем разница с другим ответом? Хорошо, разные пути в CentOS. Но что еще? Я подумал, где-то читал, что не рекомендуется указывать сокет на / tmp из соображений безопасности. - person BenRoob; 01.08.2018
comment
@BenRoob в основном сосредоточен на поиске местоположения сокета в работающей системе, что может быть полезно также при отладке - person nbari; 01.08.2018
comment
@BenRoob Ответ, получивший наибольшее количество голосов, не касается случая, когда конфигурация использует IP: PORT через сокет, и в этом случае файл, очевидно, не существует. - person SeinopSys; 04.08.2018
comment
Намного лучше, чем принято, миллионы благодарностей :) sudo vim /etc/php-fpm.d/www.conf и получил listen = /run/php-fpm/www.sock, поэтому добавлен fastcgi_pass unix: / run / php-fpm / www .носок; в nginx вместо fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock - person Nono; 05.02.2021

вы можете увидеть это, запустив

$ ss --unix |grep 'php' 
person Breign    schedule 07.08.2018

Скорее всего, установлена ​​более старая версия libpcre3, которая удовлетворяет зависимости в пакете php7.0, но только более новый пакет библиотеки предоставляет pcre_jit_stack_free.

В этом случае выполните команду apt-get install libpcre3, и все готово.

Ссылка: https://github.com/oerdnj/deb.sury.org/issues/372

Я надеюсь, это поможет вам.

person rahul singh Chauhan    schedule 03.08.2018

Используйте это:

cat /etc/php/7.0/fpm/pool.d/www.conf | grep 'listen ='

Пример вывода: 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 ='
person psirus0588    schedule 10.10.2019