Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用FastCGI/PHP fpm配置,为每个vhost指定PHP ini文件_Php_Apache - Fatal编程技术网

使用FastCGI/PHP fpm配置,为每个vhost指定PHP ini文件

使用FastCGI/PHP fpm配置,为每个vhost指定PHP ini文件,php,apache,Php,Apache,好吧,想弄明白这件事有点疯狂。(我已经阅读了数百个问题/答案和谷歌文章,但没有人回答) 我刚刚从使用mod_php改为通过FastCGI和fpm使用php,使用中描述的方法,纯粹是因为我觉得使用此设置为各个vhost指定php.ini文件“很容易” 我要说的是,如何指定每个vhost使用的定制phpini文件 幸运的是,到目前为止它只在我的试验台上。。。但是,如果我能解决这个问题,我希望在我的生产服务器上也能做到这一点。不幸的是,无法为每个vhost设置php.ini文件。您可以做的是配置不同的

好吧,想弄明白这件事有点疯狂。(我已经阅读了数百个问题/答案和谷歌文章,但没有人回答)

我刚刚从使用
mod_php
改为通过FastCGI和fpm使用php,使用中描述的方法,纯粹是因为我觉得使用此设置为各个vhost指定php.ini文件“很容易”

我要说的是,如何指定每个vhost使用的定制phpini文件


幸运的是,到目前为止它只在我的试验台上。。。但是,如果我能解决这个问题,我希望在我的生产服务器上也能做到这一点。不幸的是,无法为每个vhost设置php.ini文件。您可以做的是配置不同的php fpm池,并为每个池提供一组php配置值,用于设置/覆盖(共享)默认配置中的某些内容。请看如何做到这一点


正如@ChristianM所提到的,我想我也可以发布配置fpm池的整个过程,因为我还没有找到关于如何实现的完整解释

这篇文章的第一部分主要是AskUbuntu文章的副本:

最后一部分是如何配置池,并让vhost使用相关池设置

下面是:

安装apache mpm worker(解释预工作/wroker和事件位于):

安装fastcgi和php5 fpm:

sudo apt-get install libapache2-mod-fastcgi php5-fpm
现在启用您需要的MOD,并禁用您不需要的MOD:

sudo a2dismod php5 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
创建php5.fcgi文件并授予Web服务器使用该文件的权限

sudo touch /usr/lib/cgi-bin/php5.fcgi
sudo chown -R www-data:www-data /usr/lib/cgi-bin
为php5 fpm创建全局配置

sudo nano /etc/apache2/conf-available/php5-fpm.conf
粘贴以下内容(我们将使用套接字而不是IP地址)

重新启动apache和fpm

sudo service apache2 restart && sudo service php5-fpm restart
sudo service apache2 restart && sudo service php5-fpm restart
此设置实际上为php创建了一个全局fastcgi配置,它使用文件/etc/php5/fpm/php.ini

如果您有多个vhost,它们需要不同的php配置,请继续下面的示例

首先,在/etc/php5/fpm/pool.d目录中,您将找到默认的www.conf文件。复制此文件,并将其命名为相关内容:

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf
[...]

listen = /var/run/php5-fpm-domain2.sock

[...]
cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
编辑此文件,更改池名称:

[...]

[domain2]

[...]
并将侦听套接字的名称更改为相关名称:

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf
[...]

listen = /var/run/php5-fpm-domain2.sock

[...]
cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
然后复制/usr/lib/cgi-bin/php5.fcgi文件,再次将其命名为相关文件:

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf
[...]

listen = /var/run/php5-fpm-domain2.sock

[...]
cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
现在,您已经准备好将mod_fastcgi模块添加到domain2 vhost。它与上面描述的几乎相同,但请注意“Alias”、“FastCgiServer”和“-socket”的更改

<VirtualHost *:80>
   ServerName domain2.com

   [...]

   <IfModule mod_fastcgi.c>
     AddHandler php5.fcgi .php
     Action php5.fcgi /php5.fcgi
     Alias /php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
     FastCgiExternalServer /usr/lib/cgi-bin/php5-domain2.fcgi -socket /var/run/php5-fpm-domain2.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
      Require all granted
    </Directory>
  </IfModule>

  [...]

</VirtualHost>
现在来测试更改

在新的/etc/php5/fpm/pool.d/domain2.conf文件中,添加一个php值更改(我选择了session.name值):

现在在重新启动fpm之前测试配置:

sudo php5-fpm -t
它会告诉您配置是否失败,但更重要的是,它会告诉您配置是否正常。然后,您可以继续并重新启动fpm:

sudo service php5-fpm restart
最后,如果您想超级确定php值已设置,请在站点中创建info.php,然后添加:

<?php
  phpinfo();
?>


根据我的经验:您可以定义每个vhost的虚拟主机配置(在我们的服务器上称为
vhost.conf
),尽管整个服务器有1个php.ini。这似乎是实际的答案。不,你不能。您可以通过将它们放入fpm设置(如接受的答案所述)来解决此问题,但您根本无法指定php.ini。您可以,但前提是您使用指定的配置文件/路径设置了完整的第二个php服务。