web-dev-qa-db-ja.com

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
Shane

要するに

Php-fpm設定でUnixソケットを使用していないと思います。これは、デフォルトでphp-fpmがTCPポートを使用しているためです。

構成をよく見る

Unixソケットを使用することにしました。

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

したがって、php-fpmがこれらのUNIXソケットで実際に実行されていることを確認する必要があります。

Case 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

Case 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)

Php-fpmで実際にUNIXソケットを使用していないため、このエラーメッセージが表示される可能性が非常に高くなります。その理由は、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
Mick

fastcgiプロセスが/ usr/lib/cgi-bin /ディレクトリの読み取りを許可されていない可能性があります。 fastcgiプロセスを実行しているユーザー(あなた)は、あなたの所有者と同じグループに属していません/ usr/lib/cgi-bin /ディレクトリ。

だから、これを確認してください:

$ stat /usr/lib/cgi-bin/

応答:

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

注:www-dataはApacheのユーザーです

そうでない場合は、次のようにします。

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

ここで、ユーザーがwww-dataかどうかを前のstatコマンドで確認します。次に、自分(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
Azodium

Php5-fpmを実行してソケットアドレスをリッスンせずにWebサーバーを起動したようです。 "/ usr/lib/cgi-bin/php5-fcgi"をリッスンアドレス(fpmが受信接続を処理するためのチャネル)として指定する場合は、それがfpm構成に含まれていることを確認する必要があります。 「/etc/php5/fpm/pool.d/www.conf」は、その一般的なパスです。

次に、Apache構成で、.phpファイルがfastcgi_passを使用して要求をfpmに送信していることを確認します。間違った場所にあるUNIXソケットを想定していることを除いて、これを行うようにすでに設定されているようです。

0
Peter