Назад | Перейти на главную страницу

Apache и несколько пулов PHP-FPM

У меня есть два сайта, которые я запускаю с vhosts apache 2.2 с PHP-FPM 5.4 на Ubuntu 12.04. До сих пор я использовал общесерверную (стандартную) конфигурацию mod_fastcgi, но теперь я хочу разделить ее на два пула FPM, чтобы я мог использовать разные настройки PHP для каждого (например, один является сайтом разработчиков, поэтому отображение ошибок включено ).

Я настроил два пула 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>

На самом деле существует 4 виртуальных хоста, так как для каждого имени хоста существуют обычные и SSL-варианты, и каждая пара указывает на один пул FPM.

Проблема, с которой я столкнулся, заключается в том, что 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>

Итак, они используют разные имена, но указывают на один и тот же сокет.