PHP-FPM, Неудавшийся для соединения с сервером FastCGI

Журнал ошибок:

[Sat Nov 22 05:24:41 2014] [error] [client xx] (2)No such file or directory: FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed 
[Sat Nov 22 05:24:41 2014] [error] [client xx] FastCGI: incomplete headers (0 bytes) received from server "/usr/lib/cgi-bin/php5-fcgi"

Ну, этот файл /usr/lib/cgi-bin/php5-fcgi действительно отсутствует, и нет на самом деле ничего в cgi-bin папка. И когда я перезапускаю apache2, это, кажется, работает хорошо:

[Sat Nov 22 04:46:29 2014] [notice] FastCGI: process manager initialized (pid 10747)
[Sat Nov 22 04:46:29 2014] [notice] Apache/2.2.22 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_ssl/2.2.22 OpenSSL/1.0.1 configured -- resuming normal operations

/etc/apache2/conf.d/php-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
 </IfModule>

Таким образом, что я делаю теперь?

6
задан 2 June 2016 в 17:08
4 ответа

Похоже, вы запустили свой веб-сервер без запуска php5-fpm и прослушивания адреса сокета. Если вы хотите указать «/ usr / lib / cgi-bin / php5-fcgi» в качестве адреса прослушивания (канал для fpm для обработки входящих в него соединений), вам необходимо убедиться, что он присутствует в вашей конфигурации fpm. "/etc/php5/fpm/pool.d/www.conf" - обычный путь для него.

Затем в конфигурации apache убедитесь, что файлы .php используют fastcgi_pass для отправки запросов на fpm. Похоже, он уже настроен для этого, но ожидает, что сокет unix находится в неправильном месте.

0
ответ дан 3 December 2019 в 00:12

Короче

Могу поспорить, что вы не используете сокеты Unix в своей конфигурации php-fpm. Это связано с тем, что по умолчанию php-fpm использует TCP-порты.

Внимательно изучите свою конфигурацию

Вы решили использовать сокеты Unix:

FastCgiExternalServer / usr / lib / cgi-bin / php5-fcgi - разъем /var/run/php5-fpm.sock -pass-header Авторизация

Следовательно, вам нужно убедиться, что php-fpm действительно работает на этих сокетах unix.

Случай 1 : вы действительно используете сокеты Unix

$ sudo lsof -U | grep php
// will show you
php-fpm   17330          root    5u  unix 0xf4f64800      0t0 7045381 socket
php-fpm   17330          root    7u  unix 0xf545f080      0t0 7045382 socket
php-fpm   17330          root    8u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock
php-fpm   17331        nobody    0u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock
php-fpm   17331        nobody    0u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock

$sudo lsof -i | grep php
// should show nothing

Случай 2 : вы используете не сокеты Unix, а порты TCP

$ sudo lsof -U | grep php
// will show you
php-fpm   17330          root    5u  unix 0xf4f64800      0t0 7045381 socket
php-fpm   17330          root    7u  unix 0xf545f080      0t0 7045382 socket

$sudo lsof -i | grep php
php-fpm   13387    root    7u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   13388  nobody    0u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   13389  nobody    0u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)

Очень вероятно, что вы получите это сообщение об ошибке, потому что вы действительно не используете использование сокетов unix с php-fpm. Причина в том, что php-fpm по умолчанию настроен на использование портов tcp.

Откройте php-fpm.conf и перейдите на сокеты unix:

sudo nano /etc/php5/fpm/pool.d/www .conf

# We don't want to use TCP ports
#listen = 127.0.0.1:9000

# We want to use Unix Sockets
listen = /var/run/php5-fpm.sock

Теперь вы столкнетесь с проблемами доступа в том же файле:

// modify user and group and use same user as apache (here 'nobody')
user = nobody
group = nobody

// Uncomment those lines and use same user as apache (here 'nobody')
listen.owner = nobody
listen.group = nobody
listen.mode = 0666

Конфигурация PHP-FPM теперь использует сокеты Unix, и Apache сможет подключиться к нему.

9
ответ дан 3 December 2019 в 00:12

Возможно, что ваш fastcgi процесс не уполномочен читать ваш каталог /usr/lib/cgi-bin/, потому что пользователь, выполняющий fastcgi процесс (you) не принадлежит к той же группе, что и владелец вашего каталога /usr/lib/cgi-bin/ .

Так что убедитесь в следующем:

$ stat /usr/lib/cgi-bin/

ответ:

bla bla...... Uid: ( 33/www-data) Gid: ( 33/www-data)

Примечание: wwww-data является пользователем Apache

Если нет, то сделайте следующее:

$ sudo chown -R www-data:www-data /usr/lib/cgi-bin

теперь проверьте предыдущей командой статистики, является ли пользователь www-data. Затем вы должны добавить себя (пользователя процесса fastcgi) в группу пользователей www-data, так что :

$ sudo gpasswd -a ${USER} www-data

Теперь откройте /etc/php5/fpm/pool.d/www.conf с вашим любимым редактором.

$ sudo nano /etc/php5/fpm/pool.d/www.conf

И прокомментируйте эти строки :

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

Важно: не превращайте listen.mode в 666, это небезопасно

sudo service apache2 restart
sudo service php5-fpm restart

И шоу должно продолжаться :)

.
2
ответ дан 3 December 2019 в 00:12

Я должен был убедиться, что ссылка Apache на FastCGI в /etc/apache2/conf-available/httpd.conf:

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/apache2/php-fpm.sock -pass-header Authorization

соответствует слушающему процессу PHP FastCGI, настроенному в /etc/php5/fpm/pool.d/www.conf:

listen = /var/run/apache2/php-fpm.sock

После того, как я их сопоставил, я проверил, что FastCGI действительно работает на правильном сокете UNIX, как описано @Mick (как обычно префикс с sudo, если он не работает как root):

lsof -U | grep php

что показало, что это все еще неверно:

php5-fpm  19438       root    7u  unix 0xffff880002242b40      0t0 79631 socket
php5-fpm  19438       root    8u  unix 0xffff880002242780      0t0 79632 socket
php5-fpm  19438       root    9u  unix 0xffff8800022423c0      0t0 79633 /var/run/php-fpm.sock
php5-fpm  19440   www-data    0u  unix 0xffff8800022423c0      0t0 79633 /var/run/php-fpm.sock
php5-fpm  19441   www-data    0u  unix 0xffff8800022423c0      0t0 79633 /var/run/php-fpm.sock
php5-fpm  19442   www-data    0u  unix 0xffff8800022423c0      0t0 79633 /var/run/php-fpm.sock
php5-fpm  19443   www-data    0u  unix 0xffff8800022423c0      0t0 79633 /var/run/php-fpm.sock

Таким образом, перезапуск процесса FastCGI потребовался, чтобы принять изменения конфигурации:

service php5-fpm restart
0
ответ дан 3 March 2021 в 09:09

Теги

Похожие вопросы