Apache e vários conjuntos PHP-FPM

5

Eu tenho dois sites que executo a partir do apache 2.2 vhosts com PHP-FPM 5.4 no Ubuntu 12.04. Até agora eu tenho usado uma configuração mod_fastcgi em todo o servidor (estoque), mas agora eu quero dividir isso em dois pools FPM para que eu possa usar configurações diferentes do PHP para cada (por exemplo, um é um site dev ).

Eu configurei dois pools FPM com diferentes nomes e localizações de socket, conforme os documentos, desabilitei a configuração global fastcgi, copiei-a em meus vhosts e a alterei para apontar para os diferentes pools de cada vhost, desta forma:

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

Na verdade, existem 4 vhosts, pois há sabores regulares e SSL de cada nome de host, e cada par aponta para um pool do FPM.

O problema é que o apache lança um erro dizendo:

FastCgiExternalServer: redefinition of previously defined class "/var/fastcgi/php5.fcgi"

Como isso deve ser feito?

    
por Synchro 18.10.2012 / 11:54

1 resposta

11

O truque é que você precisa renomear a ação e o alias também para que eles não sejam 'redefinições', então, para o meu conjunto 'www', minha configuração vhost tem esta aparência:

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

E para SSL no mesmo pool:

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

Então, eles estão usando nomes diferentes, mas apontando para o mesmo soquete.

    
por 18.10.2012 / 11:54