2.10. 利用 Web 服务器提供 PHP 服务

未匹配的标注

使用 PHP-FPM

有几种方法可以配置 Web 服务器来提供 PHP 服务。回到石器时代,我们会使用 Apache 的 mod_php 。Mod_php 将 PHP 附加到 Apache 本身,但是 Apache 在管理方面做得非常糟糕。一旦你接收任何类型的真实流量,就会遭受严重的内存问题。

很快两个新方式流行起来:mod_fastcgimod_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

延伸阅读

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/phpbestpractice...

译文地址:https://learnku.com/docs/phpbestpractice...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~