gpt4 book ai didi

php - 使用 FastCGI/PHP-fpm 配置为每个虚拟主机指定 PHP ini 文件

转载 作者:可可西里 更新时间:2023-11-01 13:47:03 26 4
gpt4 key购买 nike

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

我刚刚从使用 mod_php 更改为通过 FastCGI 和 fpm 使用 PHP,使用 this question 中描述的方法,纯粹是因为我的印象是使用此设置为各个虚拟主机指定 php.ini 文件很“容易”。

我一直在纠结的是,如何指定每个虚拟主机使用的自定义 PHP ini 文件?

幸运的是,到目前为止它只在我的测试平台上使用......但如果我能解决这个问题,我希望在我的生产服务器上做同样的事情

最佳答案

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

本文的第一部分主要是 AskUbuntu 帖子的副本: https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal/527227#comment905702_527227

最后一部分是如何配置池,并让虚拟主机使用相关的池设置

这里是:

安装 apache mpm worker(prefork/wroker 和事件的解释在 http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ ):

sudo apt-get install apache2-mpm-worker

安装fastcgi和php5-fpm:

sudo apt-get install libapache2-mod-fastcgi php5-fpm

现在启用您需要的模组,并禁用您不需要的模组:

sudo a2dismod php5 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker

创建 php5.fcgi 文件并授予网络服务器使用权限。

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 地址)

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

注意:确保所有配置都遵循相同的新“要求全部授予”/“要求全部拒绝”语法......否则重启后你会感到痛苦......

启用 php5-fpm 配置

sudo a2enconf php5-fpm

重启apache和fpm

sudo service apache2 restart && sudo service php5-fpm restart

此设置实质上为 php 创建了一个全局 fastcgi 配置,它使用文件/etc/php5/fpm/php.ini 文件。

如果您有多个虚拟主机,需要不同的 php 配置,请继续下面的示例

首先,在/etc/php5/fpm/pool.d 目录中,您会找到默认的 www.conf 文件。复制这个,给它命名一些相关的东西:

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

编辑此文件,更改池名称:

[...]

[domain2]

[...]

并将监听套接字的名称更改为相关的名称:

[...]

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

[...]

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

cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi

现在您已准备好将 mod_fastcgi 模块添加到 domain2 虚拟主机。它与上面描述的几乎相同,但请注意 '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>

重启apache和fpm

sudo service apache2 restart && sudo service php5-fpm restart

现在测试更改。

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

[...]

php_admin_value[session.name] = 'DOMAIN2'

[...]

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

sudo php5-fpm -t

如果配置失败它会告诉你,但更重要的是会告诉你你的配置是否正确。然后你可以继续并重新启动 fpm:

sudo service php5-fpm restart

最后,如果您想非常确定 php 值已设置,请在您的站点中创建 info.php,然后添加:

<?php
 phpinfo();
?>

关于php - 使用 FastCGI/PHP-fpm 配置为每个虚拟主机指定 PHP ini 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30762854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com