Ubuntu 12.04でPHP-FPM 5.4を使用してApache 2.2 vhostsから実行する2つのサイトがあります。これまではサーバー全体(ストック)のmod_fastcgi構成を使用してきましたが、これを2つのFPMプールに分割して、それぞれに異なるPHP設定を使用できるようにします(たとえば1つ)開発サイトなので、エラー表示が有効になっています)。
次のように、ドキュメントに従って、名前とソケットの場所が異なる2つのFPMプールをセットアップし、グローバルfastcgi構成を無効にして、vhostsにコピーし、各vhostの異なるプールを指すように変更しました。
<IfModule mod_fastcgi.c>
<FilesMatch \.php$>
SetHandler php-script
</FilesMatch>
Action php-script /php5.fcgi virtual
Alias /php5.fcgi /var/fastcgi/php5.fcgi
FastCGIExternalServer /var/fastcgi/php5.fcgi -socket /var/run/php5-fpm-www.sock
<Directory "/var/fastcgi">
Order allow,deny
<Files "php5.fcgi">
Order deny,allow
Deny from all
Allow from env=REDIRECT_STATUS
</Files>
</Directory>
</IfModule>
各ホスト名には通常のSSLフレーバーがあり、各ペアは1つのFPMプールを指すため、実際には4つのvhostがあります。
私が遭遇する問題は、Apacheが次のようなエラーをスローすることです。
FastCgiExternalServer: redefinition of previously defined class "/var/fastcgi/php5.fcgi"
これはどのように行う必要がありますか?
トリックは、アクションとエイリアスも「再定義」しないように名前を変更する必要があるということです。したがって、「www」プールの場合、vhost設定は次のようになります。
<IfModule mod_fastcgi.c>
<FilesMatch \.php$>
SetHandler php-script
</FilesMatch>
Action php-script /php5-www.fcgi virtual
Alias /php5-www.fcgi /var/fastcgi/php5-www.fcgi
FastCGIExternalServer /var/fastcgi/php5-www.fcgi -socket /var/run/php5-fpm-www.sock
<Directory "/var/fastcgi">
Order allow,deny
<Files "php5-www.fcgi">
Order deny,allow
Deny from all
Allow from env=REDIRECT_STATUS
</Files>
</Directory>
</IfModule>
同じプールでのSSLの場合:
<IfModule mod_fastcgi.c>
<FilesMatch \.php$>
SetHandler php-script
</FilesMatch>
Action php-script /php5-www-ssl.fcgi virtual
Alias /php5-www-ssl.fcgi /var/fastcgi/php5-www-ssl.fcgi
FastCGIExternalServer /var/fastcgi/php5-www-ssl.fcgi -socket /var/run/php5-fpm-www.sock
<Directory "/var/fastcgi">
Order allow,deny
<Files "php5-www-ssl.fcgi">
Order deny,allow
Deny from all
Allow from env=REDIRECT_STATUS
</Files>
</Directory>
</IfModule>
つまり、異なる名前を使用していますが、同じソケットを指しています。