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

Eva*_*son 38 php command-line apache2

我对 unix 命令行 Web 服务器管理/管理的世界比较陌生。

许多带有控制面板管理选项的主机允许您通过一个简单的选项来更改 PHP 的运行方式。

最常见的选项是:

  • 阿帕奇模块
  • CGI应用
  • FastCGI应用

我的问题很简单,您如何通过命令行更改此设置?我知道 apache 有很多配置文件。

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

我很困惑如何似乎没有一个明确的指南,我可以找到详细说明这个过程的东西,这似乎很常见。如果存在,请原谅我......如果存在,请指出正确的方向。

JDa*_*wgg 52

感谢之前的回答,他们帮我解决了大部分问题,但为了让事情正常进行,我必须结合几个地方的指令,所以我想我会写出一套完整的命令。

仅供参考,我正在运行 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/。我的示例显示了工人,但如果您愿意,只需将工人一词替换为事件即可。

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm
Run Code Online (Sandbox Code Playgroud)

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

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker
Run Code Online (Sandbox Code Playgroud)

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

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin
Run Code Online (Sandbox Code Playgroud)

为 php5-fpm 创建全局配置

sudo nano /etc/apache2/conf-available/php5-fpm.conf
Run Code Online (Sandbox Code Playgroud)

粘贴以下内容(我们将使用套接字而不是 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>
Run Code Online (Sandbox Code Playgroud)

启用 php5-fpm 配置

sudo a2enconf php5-fpm
Run Code Online (Sandbox Code Playgroud)

重启apache和fpm

sudo service apache2 restart && sudo service php5-fpm restart
Run Code Online (Sandbox Code Playgroud)

按照其他说明将以下内容粘贴到您的网络服务器上一个新的可浏览 php 文件中。

<?php phpinfo();
Run Code Online (Sandbox Code Playgroud)

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

  • 这是救命稻草。旧 apache 的说明在 Ubuntu 14.04 和 apache 2.4 上不起作用;但这就像一种魅力。+100 !! (4认同)

Eva*_*son 20

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

新品注意事项:

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

sudo su
Run Code Online (Sandbox Code Playgroud)

就我而言,我只是在这些命令前加上前缀,sudo而不是切换用户,因此我会以这种方式记录我的步骤。

开始

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

sudo apt-get install apache2-mpm-worker
Run Code Online (Sandbox Code Playgroud)

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

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

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5
Run Code Online (Sandbox Code Playgroud)

此时,您可能会在安装“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
Run Code Online (Sandbox Code Playgroud)

这部分不在上面的教程中

为了解决这个问题,multiverse必须将存储库添加到 apt 源中。

去做这个:

sudo nano /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

我附加了以下几行:

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
Run Code Online (Sandbox Code Playgroud)

precise在这种情况下,指的是我的 Ubuntu 版本“ Precise Pangolin ”。

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

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

然后再次:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5
Run Code Online (Sandbox Code Playgroud)

这将(应该)现在工作。

现在启用这些 Apache 模块:

sudo a2enmod actions fastcgi alias
Run Code Online (Sandbox Code Playgroud)

重启阿帕奇

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

第三步:Apache配置

为了让 Apache 与 PHP-FPM 一起工作,我们需要以下配置:

<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 -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>
Run Code Online (Sandbox Code Playgroud)

笔记:

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

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>
Run Code Online (Sandbox Code Playgroud)

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

apache2 -version
Run Code Online (Sandbox Code Playgroud)

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

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

sudo nano /etc/apache2/conf.d/php5-fpm.conf
Run Code Online (Sandbox Code Playgroud)

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

重启阿帕奇:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

现在在文档根目录中创建以下 PHP 文件/var/www

sudo nano /var/www/info.php
Run Code Online (Sandbox Code Playgroud)

添加:

<?php phpinfo();
Run Code Online (Sandbox Code Playgroud)

保存并退出。

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

在顶部的服务器 API下,您应该会看到FPM/FastCGI.

成功!

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