如何在 Ubuntu 20.10 上将 Apache HTTP 配置为 PHP-FPM

Bra*_*son 4 apache2 php7 php-fpm

我按照此处的指示将服务器 API 条目切换为 FPM/FastCGI.from Server API Apache 2.0 Handler。当启用 mpm_event 且 a2dismod php7.4 时,phpinfo.php 仅显示:

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

阿帕奇状态:

Apache Server Status for localhost (via 127.0.0.1)

   Server Version: Apache/2.4.46 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.1.1f

   Server MPM: event

   Server Built: 2020-11-13T01:36:38

     ----------------------------------------------------------------------

   Current Time: Saturday, 27-Feb-2021 13:08:50 EST

   Restart Time: Saturday, 27-Feb-2021 13:05:50 EST

   Parent Server Config. Generation: 1

   Parent Server MPM Generation: 0

   Server uptime: 3 minutes

   Server load: 0.80 0.95 1.07

   Total accesses: 14 - Total Traffic: 190 kB - Total Duration: 10069

   CPU Usage: u0 s.05 cu0 cs0 - .0278% CPU load

   .0778 requests/sec - 1080 B/second - 13.6 kB/request - 719.214 ms/request

   1 requests currently being processed, 49 idle workers

   +------------------------------------------------------------------------+
   |    |     |        |Connections    |Threads  |Async connections         |
   |Slot|PID  |Stopping|---------------+---------+--------------------------|
   |    |     |        |total|accepting|busy|idle|writing|keep-alive|closing|
   |----+-----+--------+-----+---------+----+----+-------+----------+-------|
   |0   |46738|no      |0    |yes      |1   |24  |0      |0         |0      |
   |----+-----+--------+-----+---------+----+----+-------+----------+-------|
   |1   |46739|no      |0    |yes      |0   |25  |0      |0         |0      |
   |----+-----+--------+-----+---------+----+----+-------+----------+-------|
   |Sum |2    |0       |0    |         |1   |49  |0      |0         |0      |
   +------------------------------------------------------------------------+

 _______________W__________________________________..............
 ................................................................
 ......................

   Scoreboard Key:
   "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
   "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
   "C" Closing connection, "L" Logging, "G" Gracefully finishing,
   "I" Idle cleanup of worker, "." Open slot with no current process
Run Code Online (Sandbox Code Playgroud)

如果我启用 php7.4 并重新打开 mpm_prefork,它将恢复到 Apache 2.0 Handler。我正在做的事有什么不对吗?

最新说明:它部分工作,但 PHP 页面仍然无法正确显示。

PHP 页面现在可以正确显示,并且 MySQL 连接测试可以正常工作。在我输入 a2enmod php7.4 后,它应该切换到服务器 API Apache 2.0 处理程序,出现以下错误,但切换到 FPM/FastCGI。

此外,这里捕获了供将来参考的信息,这是 3 个晚上的工作:启用/禁用模块、依赖项冲突、更新、配置和日志记录。从其他帖子复制和粘贴总是很糟糕。谢谢!

解决了

a2enmod php7.4
    Considering dependency mpm_prefork for php7.4:
    Considering conflict mpm_event for mpm_prefork:
    ERROR: Module mpm_event is enabled - cannot proceed due to conflicts. It needs to be disabled first!
    Considering conflict mpm_worker for mpm_prefork:
    ERROR: Could not enable dependency mpm_prefork for php7.4, aborting
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Tho*_*ard 6

使用 Apache 设置 PHP-FPM 比简单地安装 FPM 并启用一些功能要复杂得多。它需要安装额外的模块(FastCGI)以及其他启用和禁用的功能。

有趣的是,在 Ubuntu 18.04 上通过 FastCGI 在 Apache 上使用 MPM Event 和 PHP-FPM 的 Digital Ocean 指南仍然是此设置配置的相对较好的起点,我们只需调整一些内容并调整一些更改即可18.04 至 20.04 之间。以下说明基于 DO 指南,但进行了必要的调整以使 FPM 在 20.04 中工作,调整 PHP 版本等,并只为您提供命令。

第 1 步:更改多处理模块

Apache 中的 php7.4 模块是内置模块 - 不幸的是它不适用于 PHP-FPM。所以我们需要做一些工作来使这项工作发挥作用。

首先,在我们调整配置时停止 Apache

sudo systemctl stop apache2
Run Code Online (Sandbox Code Playgroud)

然后,禁用内置的 prefork 驱动的 PHP 7.4 模块

sudo a2dismod php7.2
Run Code Online (Sandbox Code Playgroud)

禁用 prefork 模块。

sudo a2dismod mpm_prefork
Run Code Online (Sandbox Code Playgroud)

启用事件 mpm 模块

sudo a2enmod mpm_event
Run Code Online (Sandbox Code Playgroud)

现在我们配置 PHP 组件,这相当简单......

步骤 2:使用 PHP 配置 Apache 的 FastCGI 管理器

如果您还没有这样做,请安装 PHP FPM

sudo apt install php-fpm
Run Code Online (Sandbox Code Playgroud)

如果该命令不起作用,请使用以下命令:

sudp apt install php7.4-fpm
Run Code Online (Sandbox Code Playgroud)

为 Apache 安装 FCGI 模块

sudo apt install libapache2-mod-fcgid
Run Code Online (Sandbox Code Playgroud)

启用必需的库和模块

a2enmod proxy_fcgi setenvif
Run Code Online (Sandbox Code Playgroud)

启用 PHP-FPM 模块的配置(该配置已经存在)

sudo a2enconf php7.4-fpm
Run Code Online (Sandbox Code Playgroud)

现在我们需要确保语法在您的配置中传递。

步骤 3:确保配置通过测试。

运行这个命令:

sudo apachectl configtest
Run Code Online (Sandbox Code Playgroud)

此命令可能会输出更多信息,例如,但只要输出“Syntax OK”就可以了(从测试容器/环境运行,如果出现 AH00558 错误,请忽略它,只关心“Syntax”确定'输出):

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.73.252.124. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Run Code Online (Sandbox Code Playgroud)

现在配置测试已经通过了......

步骤4:重新启用Apache服务

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

现在,您应该可以让 PHP 再次运行,但 FPM 服务除外。PHP 文件应该可以再次工作。

不过,在测试之前先破坏你的浏览器缓存——网络浏览器因缓存错误消息而臭名昭著。


如果您已完成此处的所有操作,您应该会看到 PHP 按预期工作 - 这是运行 20.04 的测试环境上的 phpinfo:

在此输入图像描述