带有libapache2-mod-fcgid和/或libapache2-mod-fastcgi的php-fpm之间的区别

时间:2018-10-30 14:48:39

标签: php

现在我要使用 PHP-FPM 安装或安装新的apache2网络服务器,因为旧的服务器正在运行mod_php。

我在互联网上找到了不同的教程,其中大多数不太可能是1-2岁。他们大多数使用:

libapache2-mod-fastcgi 与Apache和PHP-FPM结合。

在Ubuntu 18.04存储库中,此软件包不可用,只有该软件包:

libapache2-mod-fcgid

我现在可以使用其中哪些?或两者有什么区别?不幸的是,我在互联网上找不到真正的解释。

此外我经常读到

mod_proxy_fcgi

这是否意味着我不再需要libaapche2-mod-f ...软件包了? ?

现在我已经安装了所有类似的东西,并且都能正常工作,但是我不确定这是否是正确的方法:

a2enmod actions fastcgi alias proxy_fcgi
apt install php-7.2 php7.2-fpm php7.2-gd php7.2-mysql php7.2-curl php7.2-xml php7.2-zip php7.2-intl php7.2-mbstring php7.2-bz2 php7.2-json php7.2-apcu php7.2-imagick
a2enmod actions fastcgi alias proxy_fcgi

vHost:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    <FilesMatch \.php$>
         SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

PHP-FPM正在运行(请参见info.php的图片): PHP-FPM Working

和之间有什么区别?

SetHandler FastCgiExternalServer ProxyPassMatch ^ /(。 .php(/.)?)$ fcgi://127.0 .0.1:9000 / path / to / your / documentroot / $ 1

我有种感觉,每个教程都在告诉我一些不同的东西,我真的无法弄清楚Ubuntu2018在2018年的最佳实践是什么。

2 个答案:

答案 0 :(得分:0)

这是我的vhost for Apache使用FPM连接到mod_proxy_fcgi(显然是推荐的设置,尽管不要求我提供详细信息!):

<VirtualHost *:80>
    ServerName awesome.scot
    ServerAlias localhost
    DocumentRoot /var/www/html/public

    <Directory "/var/www/html">
            DirectoryIndex index.php
            FallbackResource /index.php
            Options -Indexes +FollowSymLinks
            AllowOverride FileInfo All
            Require all granted
    </Directory>
    ProxyPassMatch ^/(.*\.php)$ fcgi://php:9000/var/www/html/public/$1
</VirtualHost>

在conf中,我也将这些放在:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

如果使用XDebug,则由于现在已获取9000,因此需要将其端口更改为9001。

如果您需要查看更多配置,请在https://github.com/delboy1978uk/lamp

处查看我的Docker LAMP堆栈配置。

答案 1 :(得分:0)

我知道这是一个老问题,但我想提供更新的回复。 随着 php5.3.3(2010 年)的发布,发生了很多变化。 可以在 Apache HTTP Server Wiki

上找到一些重要信息

关于如何在 Ubuntu apache2 服务器上仅安装 PHP-FPM 的简短回答 (注意:将 php7.2 替换为您已安装的版本) 是:

# Install php-fpm:
apt install php-fpm

# Disable mod_php (Apache Handler API):
a2dismod php*

# Enable Apache Modules/Configs required by fpm:
a2enmod proxy_fcgi setenvif
a2enconf php7.2-fpm.conf

# Restart the services:
systemctl restart php7.2-fpm.service systemctl restart apache2.service

如果您要运行 PHP-FPM,您还需要改变使用 Pre-fork 作为您的多处理模块 (MPM)。这是一些instructions

详细说明: 基本上有 3 种不同的服务器 API 可以与 PHP 一起安装:Apache Handler、FPM 或 CGI。 查看不同的配置文件有助于了解您的系统上可能安装了什么。 目前在带有 php7.x 的 Ubuntu 18.x 上,会根据您安装的内容创建以下 php.ini 文件:

/etc/php/7.2/cli/php.ini

这是用于在命令行上运行 php 的 PHP-CLI 程序。 每当您安装 FPM、CGI 或 Apache 处理程序时,都会包含此内容。 你可以直接安装:

apt install php-cli

要查找用于 PHP-CLI 的所有配置文件,您可以运行:

php --ini

/etc/php/7.2/apache2/php.ini

这是Apache使用的PHP插件。它将在 /etc/apache2/mods-available/php7.2 中找到 如果您还没有安装 PHP-FPM 或 PHP-CGI,那么这是包含您的网络服务器设置的文件。 要找到您需要在网站根目录中的 create a phpinfo() 文件的所有配置文件。

要安装,您还必须从 Apache 中启用 mod_php。

apt install libapache2-mod-php
a2enmod php7.2

/etc/php/7.2/fpm/php.ini

这是 FastCGI 进程管理器。它是 PHP 处理的包装器,并作为系统上的独立进程运行(与 Apache PHP 插件不同)。 如果您安装了 PHP-FPM,您将只有这个目录。 在这种情况下,它将是对您的网络服务器进行配置更改的地方,并取代 apache2/php.ini 文件。 要找到您需要在网站根目录中的 create a phpinfo() 文件的所有配置文件。 使用 PHP-FPM 将 PHP 作为 fastCGI 进程服务器运行需要使用 apache 模块 mods-enabled/mod_proxy_fcgi,它与 php-fpm 一起启用。 安装 php-fpm 还将使用 conf-enabled/php7.2-fpm.conf 配置 apache,将 FPM 设置为作为 unix 域套接字运行。

apt install php-fpm
a2enmod mod_proxy_fcgi

/etc/php/7.2/cgi/php.ini

这是安装 PHP 的第三种方式。它是运行基于 PHP 的应用程序的传统方式,而不是较新的 PHP-FPM。 mod_fcgidmod_cgimod_cgid 的高性能替代品 它还将取代 Apache 插件或 PHP-FPM 中的 php.ini。 要找到您需要在网站根目录中的 create a phpinfo() 文件的所有配置文件。 同样,它带有自己的 apache 模块和配置:mods-enabled/fcgid.conf mods-enabled/fcgid

apt install libapache2-mod-fcgid
a2enmod fcgid