2.10. 利用 Web 服务器提供 PHP 服务
使用 PHP-FPM。
有几种方法可以配置 Web 服务器来提供 PHP 服务。回到石器时代,我们会使用 Apache 的 mod_php 。Mod_php 将 PHP 附加到 Apache 本身,但是 Apache 在管理方面做得非常糟糕。一旦你接收任何类型的真实流量,就会遭受严重的内存问题。
很快两个新方式流行起来:mod_fastcgi 和 mod_fcgid。两者都保持一定数量的 PHP 执行进程,Apache 将请求发送到这些接口处理 PHP 的执行。因为这些库限制了存活的 PHP 进程数量,在不影响性能的情况下大大减少了内存占用。
一些聪明的人创建了一个 fastcgi 的实现,专门设计使 PHP 更好地工作,他们称之为 PHP-FPM。这是Ubuntu 12.04 之后 Web 服务器的标准解决方案。
在 Ubuntu 12.04 之后的几年里,Apache 引入了一种与 PHP-FPM 交互的新方法:mod_proxy_fcgi。我们将使用此模块将 Apache 接收到的 PHP 请求路由到 FPM 实例。
以下示例适用于 Apache2.4.29 ,但 PHP-FPM 也适用于其他 Web 服务器,如 Nginx。
安装 PHP-FPM 与 Apache
通过在终端上运行以下命令,你可以在 Ubuntu 18.04 上安装 PHP-FPM 和 Apache:
sudo apt-get install apache2 php-fpm
sudo a2enmod proxy_fcgi rewrite
首先,我们将创建一个新的 PHP FPM 池,为我们的应用程序提供服务。
将以下内容粘贴到 /etc/php/7.2/fpm/pool.d/mysite.conf
:
[mysite]
user = www-data
group = www-data
listen = /run/php/mysite.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 10
(请注意,在配置 PHP-FPM 池时,你可以包括许多其他非常有趣的选项。其中最有意思的是 php_admin_value[include_path]
选项。)
接下来,我们将配置 Apache virtualhost 以将 PHP 请求路由到 PHP-FPM 进程。将以下内容放在 Apache 配置文件中(在 Ubuntu 中默认路径为 /etc/apache2/sites-available/000-default.conf
;如果使用默认配置,请将其粘贴到现有的 <VirtualHost>
指令中)。
<VirtualHost *:80>
<Directory />
Require all granted
</Directory>
# Required for FPM to receive POST data sent with Transfer-Encoding: chunked
# Requires a bug fix only available in Apache 2.4.47+
SetEnv proxy-sendcl 1
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
RewriteRule . proxy:unix:/run/php/mysite.sock|fcgi://localhost%{DOCUMENT_ROOT}%{REQUEST_FILENAME} [P]
</VirtualHost>
最后,重启 Apache 和 FPM 进程:
sudo systemctl restart apache2.service php7.2-fpm.service
延伸阅读
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: