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

作者选择了 开放式互联网 / 自由言论基金作为 写给捐赠计划的一部分接受捐款。

介绍

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。

<$>[注] **注:**截至2022年7月1日,DigitalOcean不再支持通过控制面板或API创建新的FreeBSD Droplets。

前提条件

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

步骤 1 – 更改多处理模块

您将首先在 httpd.conf 文件中寻找预叉指令,这是您可以启用和禁用模块的 Apache HTTP 的主要配置文件,您可以编辑和设置指令,例如 Apache HTTP 将提供内容的倾听端口或该文件中显示的内容的位置。

要进行这些更改,您将使用nl,数字行,程序,与-ba标志来计算和数字行,以便在以后的阶段没有任何不匹配。

运行以下命令,以便nl程序将处理和编号在httpd.conf中的行,然后,grep将通过搜索给定的字符串mod_mpm_prefork来处理输出:

1nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

作为输出,你会看到类似的东西:

1[secondary_label Output]
267 LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

让我们用你的文本编辑器编辑行 67。 在本教程中,你将使用‘vi’,这是FreeBSD上的默认编辑器:

1sudo vi +67 /usr/local/etc/apache24/httpd.conf

在行开始时附上一个#符号,以便此行评论,如下:

1[label /usr/local/etc/apache24/httpd.conf]
2...
3# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
4...

通过附加#符号,您已禁用了预叉 MPM 模块。

现在你会在同一个httpd.conf文件中找到事件指令。

1nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

您将看到类似于以下的输出:

1[secondary_label Output]
2...
366  #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
4...

现在,您将删除第 66 行中的#符号,以启用事件 MPM:

1sudo vi +66 /usr/local/etc/apache24/httpd.conf

该指令现在将读成如下:

1[label /usr/local/etc/apache24/httpd.conf]
2...
3LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
4...

现在你已经将配置从MPM预先转到事件,你可以删除将PHP处理器连接到Apache HTTP的mod_php73包,因为它不再是必要的,如果它留在系统上,它会干扰:

1sudo pkg remove -y mod_php73

确保配置是正确的,运行以下命令来测试:

1sudo apachectl configtest

如果您在输出中看到Syntax OK,您可以重新启动Apache HTTP服务器:

1sudo apachectl restart

<$>[注] 注: 如果您的服务器上有其他正在运行的 HTTP 连接,建议使用 可爱的重新启动而不是正常的重新启动。

1sudo apachectl graceful

美元

您已将MPM从预先转到事件,并删除了mod_php73模块连接PHP到Apache HTTP。

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

FreeBSD 有几个支持的PHP版本,您可以通过包管理器安装。在FreeBSD上,各种可用的版本的不同二进制版本被编译,而不是只使用一种,就像大多数GNU/Linux发行版在其默认存储库中提供一样。

在此步骤中,您将添加PHP-FPM作为运行服务,以便在启动时启动,您还将通过为模块添加专用配置来配置Apache HTTP,并在httpd.conf中启用一些其他模块。

首先,您将附加 'php_fpm_enable=YES' 到 /etc/rc.conf' 文件,以便 PHP-FPM 服务可以启动。

1sudo sysrc php_fpm_enable="YES"

现在,您将将php-fpm模块添加到Apache模块的目录中,因此它被配置为由Apache HTTP使用。

1sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

将下列内容添加到 030_php-fpm.conf 中:

1[label /usr/local/etc/apache24/modules.d/030_php-fpm.conf]
2<IfModule proxy_fcgi_module>
3    <IfModule dir_module>
4    	DirectoryIndex index.php
5    </IfModule>
6    <FilesMatch "\.(php|phtml|inc)$">
7    	SetHandler "proxy:fcgi://127.0.0.1:9000"
8    </FilesMatch>
9</IfModule>

这表明,如果启用了模块 'proxy_fcgi' 和 'dir_module',那么任何匹配插件扩展的处理文件都应该由运行在本地机器上的 FastCGI 流程管理器处理,如同本地机器是一个代理服务器。

要启用代理模块,你首先要在 httpd.conf 文件中搜索它:

1nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

您将看到类似于以下的输出:

1[secondary_label Output]
2...
3129 #LoadModule proxy_module libexec/apache24/mod_proxy.so
4...

您可以通过删除#符号来删除该行:

1sudo vi +129 /usr/local/etc/apache24/httpd.conf

该行将看起来如下,一旦编辑:

1[label /usr/local/etc/apache24/httpd.conf]
2...
3LoadModule proxy_module libexec/apache24/mod_proxy.so
4...

现在你可以激活FastCGI模块,用以下命令找到该模块:

1nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

你会看到类似于以下的东西:

1[secondary_label Output]
2...
3133 #LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
4...

现在,如同你已经在其他模块中所做的那样,解读第133行:

1sudo vi +133 /usr/local/etc/apache24/httpd.conf

你会留下线条如下:

1[label /usr/local/etc/apache24/httpd.conf]
2...
3LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
4...

一旦完成,您将启动 PHP-FPM 服务:

1sudo service php-fpm start

您将重新启动Apache,以便加载包含PHP模块的最新配置更改:

1sudo apachectl restart

您已安装了 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 vi /usr/local/www/apache24/data/info.php

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

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

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

服务器 API 输入将是 ** FPM/FastCGI**。

PHP Screen the Server API entry FPM/FastCGI

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

1sudo rm /usr/local/www/apache24/data/info.php

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

结论

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

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus