Apache-2.2

Apache 和多個 PHP-FPM 池

  • July 15, 2015

我有兩個站點,我在 Ubuntu 12.04 上使用 PHP-FPM 5.4 的 apache 2.2 虛擬主機執行。到目前為止,我一直在使用伺服器範圍(庫存)的 mod_fastcgi 配置,但現在我想將其拆分為兩個 FPM 池,以便我可以為每個池使用不同的 PHP 設置(例如,一個是開發站點,因此啟用了錯誤顯示)。

根據文件,我設置了兩個具有不同名稱和套接字位置的 FPM 池,禁用了全域 fastcgi 配置,將其複製到我的虛擬主機中並將其更改為指向每個虛擬主機的不同池,如下所示:

<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”池,我的虛擬主機配置如下所示:

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

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

引用自:https://serverfault.com/questions/439692