我有两个站点,我在Ubuntu 12.04上使用PHP-FPM 5.4从apache 2.2 vhosts运行。 到目前为止,我一直在使用服务器范围的(stock)mod_fastcgiconfiguration,但是现在我想把它分成两个FPM池,这样我就可以为每个configuration使用不同的PHP设置(例如,一个是dev站点,所以启用了错误显示)。
我已经根据文档设置了两个具有不同名称和套接字位置的FPM池,禁用全局fastcgiconfiguration,将其复制到我的虚拟主机中,并将其更改为指向每个虚拟主机的不同池,如下所示:
<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'池,我的虚拟主机configuration看起来像这样:
<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>
所以他们使用不同的名字,但指向相同的套接字。