如何在CentOS 8上安装带有PHP-FPM的Apache

时间:2019-05-19 01:26:37  来源:igfitidea点击:

在Apache中运行PHP的常见方法是mod_php模块。
但相比之下,PHP-FPM有几个优势。
PHP-fpm (FastCGI进程管理器)极大地提高了Apache/PHP环境的性能。
这对高负载网站很有用。
本教程将在CentOS 8和RHEL 8 Linux系统上配置带PHP-FPM的Apache 。

步骤1 -安装Apache

Apache包在默认的AppStream存储库下可用。
我们可以使用以下命令简单地更新DNF缓存并安装Apache web服务器包。

sudo dnf update 
sudo dnf install httpd httpd-tools mod_ssl

mod_ssl包提供了为安全HTTP使用SSL证书的功能。
安装之后,启用httpd服务并启动。

sudo systemctl enable httpd
sudo systemctl start httpd

第2步-使用PHP-fpm安装PHP

Remi存储库包含CentOS 8 Linux系统的最新PHP包。
因此,首先需要将REMI存储库添加到系统中。
只需执行以下命令来添加存储库。

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

然后启用PHP安装所需的DNF模块。
在这里,我们将启用该模块来安装PHP 7.4。
我们可以根据要求将其更改为PHP 7.3或PHP 7.2。

sudo dnf module reset php
sudo dnf module enable php:remi-7.4

现在,在系统上安装PHP。

因为我们将使用FastCGI进程管理器(FPM)进行设置。
所以也安装php-fpm包。

sudo dnf update
sudo dnf install php php-fpm  php-gd php-mysqlnd

我们可能还需要更多的PHP模块,所以在进行下一步之前安装它们。
完成PHP安装后,启用PHP-fpm服务并启动它。

sudo systemctl enable php-fpm
sudo systemctl start php-fpm

确保php-fpm服务正在运行。

 **sudo systemctl status php-fpm**  

● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-12-09 21:44:57 PST; 1h 24min ago
 Main PID: 29280 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 3, slow: 0, Traffic: 0req/sec"
    Tasks: 6 (limit: 10321)
   Memory: 24.6M
   CGroup: /system.slice/php-fpm.service
           ├─29280 php-fpm: master process (/etc/php-fpm.conf)
           ├─29281 php-fpm: pool www
           ├─29282 php-fpm: pool www
           ├─29283 php-fpm: pool www
           ├─29284 php-fpm: pool www
           └─29285 php-fpm: pool www

Dec 09 21:44:57 theitroad.example.com systemd[1]: Starting The PHP FastCGI Process Manager...
Dec 09 21:44:57 theitroad.example.com systemd[1]: Started The PHP FastCGI Process Manager.

步骤3 -配置PHP-FPM

在这一步,我们已经安装了所有必需的包。
让我们开始配置过程。
首先,编辑Apache的PHP-FPM配置文件:

sudo vim /etc/php-fpm.d/www.conf

进行如下的更改。

; listen = 127.0.0.1:9000
listen = /run/php-fpm/www.sock

user = apache
group = apache

listen.allowed_clients = 127.0.0.1
listen.owner = apache
listen.group = apache
listen.mode = 0660
pm = dynamic

最新版本的Apache可以使用代理连接到套接字。
因此,确保listen设置为套接字文件。
然后将用户和组设置为与Apache服务器使用的相同。
如果需要从远程连接FPM系统更改监听。
允许客户端访问LAN IP,而不是127.0.0.1。

进行更改后,重新启动php-fpm服务使更改生效。

sudo systemctl restart php-fpm

步骤4 -创建Apache虚拟主机

现在是配置Apache使用PHP -fpm处理PHP文件的时候了。
这里有两个选项,要么使用FPM作为所有虚拟主机的默认值,要么专门配置虚拟主机使用FPM。
这样,其他虚拟主机就不会受到影响。
对于本例,我仅为一个特定的虚拟主机配置FPM。
在文本编辑器中编辑配置文件:

sudo vim /etc/httpd/conf.d/example.com.conf

现在添加代理配置使用一个套接字文件。
还配置了所有PHP脚本使用fpm处理程序执行。

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html

    ServerName example.com
    ServerAlias www.example.com

    # Proxy declaration
    <Proxy "unix:/run/php-fpm/www.sock|fcgi://php-fpm">
       # we must declare a parameter in here (doesn't matter which) or 
       # it'll not register the proxy ahead of time

       ProxySet disablereuse=off

       # Note: If you configure php-fpm to use the "pm = ondemand" 
       #then use "ProxySet disablereuse=on"
     </Proxy>

     <FilesMatch \.php$>
           SetHandler proxy:fcgi://php-fpm
     </FilesMatch>

    ErrorLog logs/example.com-error.log
    CustomLog logs/example.com-access.log combined
</VirtualHost>

保存虚拟主机配置文件并重新加载Apache使更改生效。

sudo systemctl restart httpd

步骤5-启用防火墙规则

服务器已经准备好为应用程序提供服务。
如果系统上启用了防火墙,请确保Apache端口是开放的,可以从远程系统访问。
以下命令将为我们打开所需的端口。

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload

步骤6 -测试设置

要测试环境,创建一个PHP脚本,内容是调用phpinfo()函数。
将此文件放置到服务器文档根目录中。
使用下面的命令来完成此操作。

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

然后使用浏览器访问info.php。

http://localhost/info.php

总结

我们已经在CentOS 8或RHEL 8 Linux系统上成功地使用PHP-FPM配置了Apache。