如何在 Ubuntu 18.04 上使用 MPM 事件和 PHP-FPM 配置 Apache HTTP

作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。

介绍

Apache HTTP网页服务器多年来一直在演变,以在不同的环境中工作并解决不同的需求。 一个重要的问题Apache HTTP必须解决,就像任何网页服务器一样,是如何处理不同的流程来服务HTTP协议请求。 这包括打开一个接口,处理请求,保持连接开放一段时间,处理通过该连接发生的新事件,并返回用特定语言(如PHP,Perl或Python)制作的程序产生的内容。

Apache HTTP 配备了三个不同的 MPM:

  • ** Pre-fork**:为到达服务器的每个接入的连接创建了新进程. 每个过程都与其它过程相隔开来,所以它们之间没有共享记忆,即使它们在执行过程中的某个时候执行相同的呼叫. 这是一种安全的方法,可以运行与不支持线程的库相连接的应用程序—— 通常是更古老的应用程序或库.
  • Worker:一个父进程负责启动一个儿童进程集合,其中一些进程正在监听新来的连接,另一些进程正在服务所请求的内容. 每个进程被线化(一个单线程可以处理一个连接),因此一个进程可以同时处理几个请求. 这种处理连接的方法鼓励更好地利用资源,同时保持了稳定。 这是可用流程集合的结果,这些流程往往有免费可用的线程准备立即为新连接服务. *Event:基于工人,这个MPM更进一步,通过优化父母流程调度给孩子流程以及与之相关的线程的任务. 连接默认会打开5秒, 如果没有新事件发生则关闭; 这是 keep- alive 指令默认值, 它保留与之相关的线程 。 事件 MPM 使进程能够管理线程,这样一些线程就可以自由处理新接入的连接,而另一些则被绑定在活的连接上. 允许将分配的任务重新分配给线程,将有利于更好的资源利用和性能。

MPM Event模块是一个快速的多处理模块,可在Apache HTTP Web 服务器上使用。

PHP-FPM是PHP的FastCGI流程管理器。FastCGI协议是基于通用网关接口(CGI),该协议位于应用程序和Web服务器之间,如Apache HTTP。这使开发人员能够从Web服务器的行为分开编写应用程序。程序独立运行他们的流程,并通过该协议将他们的产品传递给Web服务器。

通过将Apache HTTP中的MPM事件与PHP FastCGI Process Manager(PHP-FPM)相结合,一个网站可以加载更快,同时使用更少的资源来处理更多的同时连接。

在本教程中,您将通过将默认的多处理模块从预先到事件更改,并使用PHP-FPM流程管理器来处理PHP代码,而不是经典的mod_php在Apache HTTP。

前提条件

在您开始本指南之前,您将需要以下内容:

步骤 1 – 更改多处理模块

Ubuntu 继承了启用或禁用其主发行版 Debian 的 Apache HTTP 模块的脚本,在此步骤中,您将使用此工具集来禁用 Pre-fork 模块并启用事件模块。

在此步骤中,您将停止Apache HTTP,禁用与预先叉路模块链接的PHP 7.2模块,然后禁用预先叉路,立即启用事件模块。

首先,您将停止 Apache HTTP 服务:

1sudo systemctl stop apache2

现在,您可以禁用与 Pre-fork 模块相关的「PHP 7.2」模块:

1sudo a2dismod php7.2

然后禁用 Pre-fork MPM 模块:

1sudo a2dismod mpm_prefork

现在启用 Event MPM 模块:

1sudo a2enmod mpm_event

您已将MPM从预先转到事件,并删除了PHP 7.2和Apache HTTP之间的PHP 7.2模块连接。在下一步中,您将安装php-fpm模块,以及相关的库和代理模块。

步骤 2 — 配置 Apache HTTP 使用 FastCGI 流程管理器

在这个阶段,你已经切换了Apache HTTP处理连接的方式,通过从预先叉的MPM移动到事件,但沿途你已经禁用了将Apache HTTP连接到运行在PHP上的任何程序的PHP模块。

在此步骤中,您将安装 PHP-FPM 处理器,以便 Apache HTTP 再次能够处理 PHP 程序,您还将安装依赖库并启用模块,以便两者能够比以前更顺利、更快地合作。

下列命令将安装 PHP-FPM 包,并将自动启用与 systemd集成的 php7.2-fpm 服务,因此该服务在启动时启动:

1sudo apt install php-fpm

为了进行通信,Apache HTTP和PHP需要一个允许这种容量的库,现在你将安装libapache2-mod-fcgid,它可以作为与Web服务器的程序之间的接口,并且它是特定的Apache HTTP。

安装此图书馆:

1sudo apt install libapache2-mod-fcgid

你已经安装了php-fpmlibapache2-mod-fcgid,但两者都尚未启用。

首先,使用以下命令启用php-fpm模块:

1sudo a2enconf php7.2-fpm

第二,启用Apache HTTP代理模块:

1sudo a2enmod proxy

第三,在Apache HTTP中启用FastCGI代理模块:

1sudo a2enmod proxy_fcgi

<$>[注] **注:**您可以通过UNIX插槽读取PHP程序与Apache HTTP之间的这种互动的配置,如下:

1cat /etc/apache2/conf-enabled/php7.2-fpm.conf

美元

现在一切都已经做好了,所以你可以启动Apache HTTP。

1sudo apachectl configtest
1[secondary_label Output]
2Syntax OK

之后,您可以继续重新启动Apache HTTP,因为它在安装FastCGI库libapache2-mod-fcgid时自动启动:

1sudo systemctl restart apache2

您已安装了php-fpm模块,配置了Apache HTTP以便与其工作,启用了FastCGI协议所需的模块,并启动了相应的服务。

现在,Apache 已启用 Event MPM 模块,并且 PHP-FPM 已经存在并运行,现在是时候检查一切按预期工作了。

步骤3 - 检查您的配置

为了检查配置更改是否已应用,您将运行一些测试. 第一种测试将检查 Apache HTTP 正在使用的多处理模块。

通过运行以下命令检查 Apache HTTP 服务器:

1sudo apachectl -M | grep 'mpm'

您的输出将如下:

1[secondary_label Output]
2mpm_event_module (shared)

您可以对代理模块和FastCGI重复:

1sudo apachectl -M | grep 'proxy'

结果将显示:

1[secondary_label Output]
2proxy_module (shared)
3proxy_fcgi_module (shared)

如果你想看到整个模块列表,你可以删除-M之后的命令的第二部分。

现在是时候检查PHP是否使用FastCGI流程管理器了,这样做你会写一个小PHP脚本,它会给你显示与PHP相关的所有信息。

运行以下命令来写一个名为以下的文件:

1sudo nano /var/www/your_domain/info.php

将以下内容添加到info.php文件中:

1[label info.php]
2<?php phpinfo(); ?>

现在请访问您的服务器的URL,并在末尾添加info.php:http://your_domain/info.php

服务器API输入将是 FPM/FastCGI

PHP Screen the Server API entry FPM/FastCGI

在此检查后,删除info.php文件,以便不公开披露有关服务器的信息:

1sudo rm /var/www/yourdomain.com/info.php

你已经检查了MPM模块的工作状态,处理FastCGI和处理PHP代码的模块。

结论

您已经优化了原始的 LAMP 堆栈,因此创建新的 Apache HTTP 流程的连接数量增加了,PHP-FPM 将更有效地处理 PHP 代码,并提高了整体资源利用率。

请参阅 Apache HTTP 服务器项目 文档 有关不同模块和相关项目的更多信息。

Published At
Categories with 技术
comments powered by Disqus