在 Ubuntu 16.04 上使用 FastCGI 配置 Apache 2.4 - 如何处理 php7.0-fpm.conf?

在 Ubuntu 16.04 上使用 FastCGI 配置 Apache 2.4 - 如何处理 php7.0-fpm.conf?

我已成功通过改编以下说明使 FastCGI 在 Ubuntu 16.04 上与 Apache 2.4 配合使用:这个 askubuntu 线程此 HowtoForge 文档, 和这个 Digital Ocean 教程

所有这些消息来源都表示创造 /etc/apache2/conf-available/php7.0-fpm.conf并告诉你要放什么进去。但安装后php-fpm,我已经有了这个文件,内容如下:

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>

因此我创建了自己的 conf,并将说明中的代码放入其中并启用它。

现有的功能有什么php7.0-fpm.conf用?如果我在配置中启用它,我的网站就会停止工作。我担心我没有按照预期的方式进行操作,将来可能会出现问题。很难找到关于此问题的良好、最新的文档。

作为参考,这是我的整个过程:

sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf

内容/etc/apache2/conf-available/custom-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php
    Action php7-fcgi /php7-fcgi virtual
    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
    <Directory /usr/lib/cgi-bin>
            Require all granted
    </Directory>
</IfModule>

命令继续:

sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm

在此先感谢您的帮助。

答案1

我也遇到过同样的困惑,我理解你的痛苦。经过大量阅读,我发现大多数文章都已经过时了,而且引用了以前的方法(有时是组合)。

使用 PHP-FPM 和 Ubuntu 16.04 的内置配置,你可以仅有的需要这样做:

sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi

我做了你所做的大部分事情,然后当那个自定义配置没有意义时,它就全部被删除了。

现有的 php7.0-fpm.conf 是做什么用的?

您发现软件包安装的配置用于使用 mod_proxy_fcgi。它通过 mod_proxy_fcgi 将 .php 文件绑定到 PHP FPM,使用 mod_proxy,通过 Unix 域套接字。据我所知,这是最新的“配方”(目前有六种可用配方!)

您不需要安装,libapache2-mod-fastcgi这是另一种更老的方法。您不需要编写该配置 - 这是为了直接使用 mod_fastcgi。您不需要actions fastcgi alias像配置 mod_fastcgi 那样进行安装。

我确实觉得很奇怪,没有任何文章 - 甚至是针对 Ubuntu 16 的文章 - 提到新的配方都是为你设置的!

这条评论为我澄清了历史:

现在首选的方法是 fastcgi,使用以下任一方法:

(mod_fastcgi,httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi

(mod_fcgid,httpd 2.2) http://wiki.apache.org/httpd/php-fcgid

(mod_proxy_fcgi,httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM

http://php.net/manual/en/install.unix.debian.php#112544(2013 年)

此外,Apache 的这篇文章详细介绍了使用 ProxyPassMatch 或 SetHandler + UDS 配置 mod_proxy_fcgi 连接到 FPM 的三个子选项。请注意,UDS 自 Apache 2.4.10 以来一直https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html因此需要 trusty-backports 或更新版本。

https://wiki.apache.org/httpd/PHP-FPM

因此我认为现在有六种方法可以配置它:

大致按照历史顺序:

  1. Apache PHP 模块:mod_php(旧方法)

  2. 通过 FastCGI - 使用 Handler/Action/Alias/FastCgiExternalServer 配置

    mod_fastcgi 的用法和样例:

    mod_fcgid 是用于将用户连接到计算机的单一设备。

  3. 通过 mod_proxy_fcgi 使用 PHP-FPM,可通过以下方式配置:

    a. TCP 套接字(IP 和端口)ProxyPassMatch ... fcgi://127.0.0.1:9000/path/

    b.Unix 域套接字 (UDS) ProxyPassMatch … unix:/path/to/socket

    c. (UDS)通过 SetHandler "proxy:unix: 或 SetHandler "proxy:fcgi:

免责声明:这对我来说都是新的,所以我可能还有五件错误的事情和十件需要学习的事情。

相关内容