题 Apache和多个PHP-FPM池


我有两个站点,我在Ubuntu 12.04上使用PHP-FPM 5.4从apache 2.2 vhosts运行。到目前为止,我一直在使用服务器级(库存)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个vhost,因为每个主机名都有常规和SSL风格,每对指向一个FPM池。

我遇到的问题是apache抛出错误说:

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

该怎么做?


5
2017-10-18 09:54




顺便说一下,我使用的是FilesMatch而不是AddHandler,因为它更具体。 - Synchro


答案:


诀窍是你需要重命名动作和别名,所以它们不是'重新定义',所以对于我的'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>

所以他们使用不同的名字,但指向同一个套接字。


11
2017-10-18 09:54