我对 UNIX 命令行 Web 服务器管理/管理领域还比较陌生。
许多具有控制面板管理选项的主机允许您使用简单选项更改 PHP 的运行方式。
最常见的选择是:
- Apache 模块
- CGI 应用程序
- FastCGI 应用程序
我的问题很简单,如何通过命令行更改这一点?我知道 apache 有很多配置文件。
我发现最接近的东西是这个问题,但是目录结构似乎与我的操作系统(Ubuntu 12.04)不匹配。
我很困惑为什么我找不到一个清晰的指南来详细说明这个看似很常见的过程。如果有的话请原谅我……如果有的话,请给我指明正确的方向。
答案1
感谢之前的回答,它们帮助了我大部分工作,但为了让事情正常运转,我必须结合来自几个地方的说明,所以我想我会写一套完整的命令。
仅供参考,我正在运行 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
现在启用您需要的模式,并禁用您不需要的模式。
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 地址)
<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 文件中。
<?php phpinfo();
在网络浏览器中打开刚刚编辑的文件,如果在服务器 API 旁边看到“FPM/FastCGI”,则表示您现在正在使用 FastCGI 为 PHP 提供服务!
答案2
我终于找到了一个不错的教程,专门介绍如何做到这一点。我将概述我所采取的步骤,因为我已经安装了 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 一起工作,我们需要以下配置:
<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>
笔记:
如果你使用的是旧版本的 Apache(2.3.x 或更早版本),请省略该行
<Directory /usr/lib/cgi-bin> Require all granted </Directory>
您可以使用命令检查您安装的版本
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
现在在文档根目录中创建以下 PHP 文件/var/www
:
sudo nano /var/www/info.php
添加:
<?php phpinfo();
保存并退出。
现在我们在浏览器中调用该文件(例如http://your-server-ip/info.php
)
在下面服务器 API在顶部你应该看到FPM/FastCGI
。
成功!
有关更多信息,例如如何将 PHP-FPM 更改为使用 unix 套接字而不是默认 TCP 端口,或者如何为单个虚拟主机(而不是所有虚拟主机)配置此功能,请参阅顶部链接的源教程。
答案3
在 Ubuntu 14.04 中,按照已接受答案的步骤进行操作后,编辑/etc/apache2/conf-available/php5-fpm.conf
<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>
然后执行
#sudo a2enconf php5-fpm
#sudo apache2 restart
答案4
如果有人在 Ubuntu 16.04 上执行此操作并从 php 7 降级到 php 5.6(Ondrej),则必须替换一些行(基于 JDawgg 的回答):
sudo apt-get install libapache2-mod-fastcgi php5-fpm 到:
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 准备的。
<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/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
我将路径从 /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 到:
sudo service apache2 restart && sudo service php5.6-fpm restart
我希望这能帮助其他和我一样的新手:)