如何配置Apache通过终端在Ubuntu 12.04上运行PHP作为FastCGI?

我对unix命令行Web服务器管理/管理的世界相对较新。

许多具有控制面板管理选项的主机允许您使用简单选项更改PHP的运行方式。

最常见的选择是:

  • apache模块
  • CGI申请
  • FastCGI应用程序

我的问题很简单,你如何通过命令行改变它? 我知道apache有很多配置文件。

我发现最接近的是这个问题 ,但目录结构似乎与我的操作系统(Ubuntu 12.04)不匹配。

我很困惑,似乎没有一个明确的指南,我可以找到这个过程的详细信息似乎是如此常见的事情。 如果存在,请原谅我……如果是这样,请指出我正确的方向。

感谢以前的答案,他们大部分都得到了我,但为了让事情有效,我必须结合几个地方的指令,所以我想我会编写一套完整的命令。

仅供参考我正在运行Ubuntu 14.04,Apache 2.4,并且默认运行modphp,之前的说明也省略了禁用modphp的需要。

我还发现http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/非常有用且直截了当。

只需在终端中依次运行以下命令即可。

首先安装必要的软件包(我省略了php5,因为它假定它已经安装,首次安装时重新添加)。 另请注意,从Apache 2.4开始,您可以使用event-mpm而不是worker来查看http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ 。 我的例子显示了worker,但是如果您更愿意使用它,只需用worker替换单词worker。

sudo apt-get install apache2-mpm-worker 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文件并授予webserver使用它的权限。

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

  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  Require all granted   

启用php5-fpm conf

 sudo a2enconf php5-fpm 

重启apache和fpm

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

根据其他说明,将以下内容粘贴到Web服务器上的新可浏览php文件中。

  

在Web浏览器中打开刚刚编辑的文件,如果在Server API旁边看到“FPM / FastCGI”,那么现在使用FastCGI为PHP服务!

我终于找到了一个很好的教程,专门做这个。 我将概述我已经安装了LAMP堆栈的步骤,但可以在此处找到完整的教程。

注意新的:

在本教程中,它首先切换到root用户:

 sudo su 

在我的情况下,我只是简单地为那些命令sudo而不是切换用户,所以我将以这种方式记录我的步骤。

开始

第一步:安装Apache Worker MPM(多处理模块)

 sudo apt-get install apache2-mpm-worker 

这取代了我安装的prefork,这是安装Apache时的默认设置。

第2步:安装PHP5和必要的模块

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

此时,您可能会在安装’libapache2-mod-fastcgi’时出错:

 Reading package lists... Done Building dependency tree Reading state information... Done Package libapache2-mod-fastcgi is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'libapache2-mod-fastcgi' has no installation candidate 

这部分不在上面的教程中

要协调这一点,必须将multiverse存储库添加到apt源。

去做这个:

 sudo nano /etc/apt/sources.list 

我附加了以下几行:

 deb http://archive.ubuntu.com/ubuntu precise multiverse deb http://archive.ubuntu.com/ubuntu precise-updates multiverse deb http://security.ubuntu.com/ubuntu precise-security multiverse 

在这种情况下, precise指的是我的Ubuntu版“ 精确穿山甲 ”。

所以现在,保存这些更改并返回终端:

 sudo apt-get update 

然后再次:

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

哪些(应该)现在有效。

现在启用这些Apache模块:

 sudo a2enmod actions fastcgi alias 

重启apache

 sudo service apache2 restart 

第3步:Apache配置

要使Apache与PHP-FPM一起使用,我们需要以下配置:

  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 -host 127.0.0.1:9000 -pass-header Authorization  Require all granted  #directory statement mult be on multiple lines  

注意:

如果您使用的是旧版本的Apache(2.3.x或更早版本),请忽略该行

   Require all granted  

您可以使用该命令检查已安装的版本

 apache2 -version 

您可以将其置于全局Apache配置中(因此它为所有vhost启用),例如在/etc/apache2/conf.d/php5-fpm.conf (此文件不存在,因此您必须创建它),或者您可以将它放在应该使用PHP-FPM的每个vhost中。

我选择走全球路线,所以:

 sudo nano /etc/apache2/conf.d/php5-fpm.conf 

粘贴在上面的代码块中,然后保存,退出。 这个新文件将由Apache的默认配置自动加载,该配置加载/etc/apache2/conf.d/目录中的所有文件。

重启Apache:

 sudo service apache2 restart 

现在在文档root /var/www创建以下PHP文件:

 sudo nano /var/www/info.php 

加:

  

保存并退出。

现在我们在浏览器中调用该文件(例如http://your-server-ip/info.php

在顶部的Server API下,您应该看到FPM/FastCGI

成功!

有关如何更改PHP-FPM以使用unix套接字而不是默认TCP端口或如何为单个虚拟主机而不是所有虚拟主机配置此更多信息,请参阅顶部链接的源教程。

在完成接受的答案的步骤后,在Ubuntu 14.04中编辑/etc/apache2/conf-available/php5-fpm.conf

  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  Require all granted   

然后执行

 #sudo a2enconf php5-fpm #sudo apache2 restart 

如果有人在Ubuntu 16.04上执行此操作并已从php 7降级到php 5.6(Ondrej),则必须替换一些行(基于JDawgg的答案):

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

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

sudo a2dismod php5 mpm_prefork:

 sudo a2dismod php5.6 mpm_prefork 

sudo nano /etc/apache2/conf-available/php5-fpm.conf:

 sudo vim /etc/apache2/conf-available/php5.6-fpm.conf 

php5.6-fpm的安装过程已经创建了文件,因此无需创建文件。 但是,我删除了该文件中的所有现有文本,因为它适用于mod_php5。

  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/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600  Require all granted   

当文件位于那里时,我将路径从/var/run/php5-fpm.sock更改为/var/run/php/php5.6-fpm.sock。

sudo a2enconf php5-fpm:

 sudo a2enconf php5.6-fpm 

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

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

我希望这有助于像我这样的其他新手:)