Debian Wheezyでこのエラーが発生しましたが、何が欠けているのかわかりません。 php5-fpmからのログはOKです。
Apache2ログからのエラー:
[error] (2)No such file or directory: FastCGI: failed to connect to server "/var/lib/Apache2/fastcgi/php5.fastcgi": connect() failed
[error] FastCGI: incomplete headers (0 bytes) received from server "/var/lib/Apache2/fastcgi/php5.fastcgi"
fastcgi.confの内容:
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/Apache2/suexec
FastCgiIpcDir /var/lib/Apache2/fastcgi
</IfModule>
php5-fpm.confの内容:
<IfModule mod_fastcgi.c>
Alias /php5.fastcgi /var/lib/Apache2/fastcgi/php5.fastcgi
AddHandler php-script .php
FastCGIExternalServer /var/lib/Apache2/fastcgi/php5.fastcgi -socket /var/run/php5-fpm.sock -idle-timeout 610
Action php-script /php5.fastcgi virtual
# Forbid access to the fastcgi handler.
<Directory /var/lib/Apache2/fastcgi>
<Files php5.fastcgi>
Order deny,allow
Allow from all
</Files>
</Directory>
# FPM status page.
<Location /php-fpm-status>
SetHandler php-script
Order deny,allow
Deny from all
Allow from 127.0.0.1 ::1
</Location>
# FPM ping page.
<Location /php-fpm-ping>
SetHandler php-script
Order deny,allow
Deny from all
Allow from 127.0.0.1 ::1
</Location>
</IfModule>
pool.d/www.confの内容:
[www]
listen = /var/run/www.sock
; Permission socket
listen.owner = www
listen.group = www
; Utilsateur/Groupe des processus
user = www
group = www
; gestion des processus
pm = dynamic
pm = dynamic
pm.max_children = 500
pm.start_servers = 500
pm.min_spare_servers = 150
pm.max_spare_servers = 500
request_terminate_timeout = 605
; Status
pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping
; log
access.log = /var/log/php/access.www.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
;Conf PHP
php_admin_value[open_basedir]=/home/web/xxx/www/prod
php_admin_value[session.save_path]=/home/web/xxx/www/tmp
php_admin_value[upload_tmp_dir]=/home/web/xxx/www/tmp
php_admin_value[error_log] = /var/log/php/error.www.log
php_admin_flag[log_errors] = on
php_admin_value[max_execution_time] = 0
php_admin_value[max_input_time] = 0
; upload
php_admin_value[upload_max_filesize] = 105M
php_admin_value[post_max_size] = 105M
Apache VHost www:
<VirtualHost *:80>
ServerName xxxx.com
ServerAdmin [email protected]
DocumentRoot /home/web/xxxx/www/prod
Options None
Fast CGI + FPM:
FastCgiExternalServer /home/web/xxxx/www/cgi-bin/php5.external -idle-timeout 310 -flush -socket /var/run/www.sock
Alias /cgi-bin/ /home/web/xxxx/www/cgi-bin/
<Directory /home/web/xxxx/www/prod/>
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/Apache2/error.www_prod.log
LogLevel debug
CustomLog /var/log/Apache2/access.www_prod combined
</VirtualHost>
grep www/etc/passwdの出力:
www:x:1001:1001:,,,:/home/web/xxxx/www:/bin/bash
Apache2ctl -t -D DUMP_MODULESの出力:
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
mpm_worker_module (static)
http_module (static)
so_module (static)
actions_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_Host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgid_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
fastcgi_module (shared)
mime_module (shared)
negotiation_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
ssl_module (shared)
status_module (shared)
Syntax OK
何が足りないのですか?
pool.d/www.confで、注意してください
listen = /var/run/www.sock
php5-fpm.confのこの行:
FastCGIExternalServer /var/lib/Apache2/fastcgi/php5.fastcgi -socket /var/run/php5-fpm.sock -idle-timeout 610
/var/run/php5-fpm.sockは、pool.d /www.confのlistenオプションと同じである必要があります
VHost www:
FastCgiExternalServer /home/web/xxxx/www/cgi-bin/php5.external -idle-timeout 310 -flush -socket /var/run/www.sock
この行はなしでは役に立たない
Alias /php5.external /home/web/xxxx/www/cgi-bin/php5.external
Action php-script /php5.external virtual
この助けを願っています。
これについてはここで読むことができます: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer
私はあなたがそれぞれの仮想ホストを異なるユーザー/グループとして実行したいと思っていると仮定しています。それ以外の場合は、confファイルの実質的にどこにでも必要です(fastcgi.confにある可能性があります)。そのためには、このURLをチェックしてください:
ユーザーとして実行するために、これがどのように機能するかを説明しようと思います。
Php-fpm.confに触れる必要はないと思います。php5-fpmをインストールしたときと同じままにしてください。コメントなしで私のものは次のようになります。
php-fpm.conf
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
include=/etc/php5/fpm/pool.d/*.conf
あなたは1つの仮想ホストを持っているように見えるので、とにかく2つのfastcgiexternalserversで何をするかわかりません。
PHPを圧縮する手順は次のとおりです。
ここ#4では、#3で指定されたエイリアスがfastcgiexternalserverによって解決され(パスが存在する必要はありません)、ソケットパラメーターは前に定義したFastCgiIpcDirに関連するファイル名です。私は現在、そのために次のディレクトリを使用しています。
FastCgiIpcDir /var/run/
これは、あなたの旅が/etc/php5/fpm/pool.d/www.confで続くことを意味します
重要な行は次のとおりです。
listen = /var/run/php5-fpm.sock
パスはfastcgiipcdirに相対ソケット名を加えたものと同じである必要があるため、フローはここで取得されます。コメントを省く:
www.conf
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
聞きたいソケットごとに(各ソケットが異なる場合はサイトごとに)、新しいconfファイル(www.confなど)を作成する必要があります。前に説明した4つの手順は、他のユーザー/グループとして実行する各仮想ホストで行う必要があります。私はそれがこのように見えるべきだと信じています:
仮想ホストwww
<VirtualHost *:80>
ServerName xxxx.com
ServerAdmin [email protected]
DocumentRoot /home/web/xxxx/www/prod
Options None
AddHandler php-script .php
Action php-script /php5.fastcgi
Alias /php5.fastcgi /var/lib/Apache2/fastcgi/php5.fastcgi
FastCgiExternalServer /var/lib/Apache2/fastcgi/php5.fastcgi -socket php5-fpm.sock
<Directory /home/web/xxxx/www/prod/>
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/Apache2/error.www_prod.log
LogLevel debug
CustomLog /var/log/Apache2/access.www_prod combined
</VirtualHost>
この後、ソケットが作成される場所に必ず書き込みアクセス権を付与してください。これは、ubuntuでのfastcgiipcdir/var/runであり、/ runを指しているので、次のように変更しました。
chmod 777 /run
(もちろん、それはあまり良いことではありませんが、デモンストレーションとローカルテストには問題ありません)
サイトを有効にする:
a2ensite site //site: just whatever your www vhost conf file name is
そして、試してみたいときは、常にphp-fpmとApacheの両方を再起動してください:
service php5-fpm restart
service Apache2 restart
これらを最初に理解してみてください。そうすれば、それを機能させることが簡単になります。いろいろな組み合わせを試してみましたが、理解してみると理にかなっています。