Configurer Apache et PHP-FPM sous Rocky Linux

Publié le 25/04/2025 - 5 minutes de lecture

Rocky Linux est le successeur de CentOS, créé suite à l'abandon de cette distribution, annoncé par Redhat en décembre 2020. C'est une alternative intéressante pour l'hébergement d'applications:

  • stabilité : absence de changements brusques de fonctionnalités susceptibles de perturber les systèmes de production
  • support à long terme : cycles de support de 10 ans
  • communauté active : soutenu par des professionnels de l'infrastructure IT

Alternatives

D'autres distributions peuvent également être considérées pour cet usage:

  • AlmaLinux : concurrent direct de Rocky Linux
  • Debian : distribution communautaire, très stable
  • Ubuntu Server : approche moderne avec mises à jour fréquentes, basée sur Debian

PHP-FPM (FastCGI Process Manager)

PHP-FPM est un gestionnaire de processus FastCGI amélioré pour PHP, conçu pour gérer efficacement les applications web PHP dans les environnements de production.

Ces principaux avantages :

  • performance améliorée grâce à la gestion de pools de processus
  • isolation et sécurité entre les différentes applications
  • redémarrage gracieux sans interruption de service

Apache

Avant de démarrer l'installation, si vous avez déjà utilisé Apache sous Debian et Ubuntu, sachez qu'il existe quelque différences avec la version pour les distributions de la famille RedHat.

Différences principales entre Apache sur Debian/Ubuntu Server et RHEL/Rocky Linux

Debian/UbuntuRHEL/Rocky Linux
Nom du serviceapache2httpd
Répertoire principal/etc/apache2//etc/httpd/
Structure des configurationsPlus modulaire avec plusieurs sous-répertoiresPlus simple avec moins de sous-répertoires
Activation des sitesSystème a2ensite/a2dissitePas d'équivalent direct
Activation des modulesSystème a2enmod/a2dismodPas d'équivalent direct
Certificats SSL par défaut/etc/ssl/certs/ et /etc/ssl/private//etc/pki/tls/certs/ et /etc/pki/tls/private/
Fichier de configuration principalapache2.confhttpd.conf
Gestion des modulesFichiers séparés .load et .conf dans mods-availableModules généralement dans /etc/httpd/conf.modules.d/
Utilisateur par défautwww-dataapache

Structure

/etc/httpd/
├── conf/
│   └── httpd.conf        # Fichier de configuration principal
├── conf.d/               # Configurations supplémentaires chargées automatiquement
│   ├── ssl.conf          # Configuration SSL globale (avec VirtualHost par défaut)
│   ├── autoindex.conf    # Configuration pour l'indexation automatique
│   ├── userdir.conf      # Configuration pour les répertoires utilisateurs
│   └── app.conf          # Votre VirtualHost HTTPS personnalisé
├── conf.modules.d/       # Configuration des modules chargés
│   ├── 00-base.conf
│   ├── 00-ssl.conf       # Chargement du module SSL
│   └── ...
├── logs/ -> /var/log/httpd/               # Lien symbolique vers les logs
├── modules/ -> /usr/lib64/httpd/modules/  # Lien symbolique vers les modules compilés
└── run/ -> /run/httpd/                    # Lien symbolique vers les fichiers d'exécution

Installation

Mise à jour du système

sudo dnf update -y

Installation d'Apache

# httpd est le nom du paquet Apache sur les distributions Red Hat,
# contrairement aux distributions Debian où il est nommé apache2
sudo dnf install httpd mod_ssl -y

# démarrage du service Apache
sudo systemctl start httpd
# configuration pour qu'il soit lancé automatiquement avec le démarrage du système
sudo systemctl enable httpd

Configuration du fireawall

# Ouverture des ports HTTP et HTTPS
# L'option --permanent permet de conserver la configuration entre les redémarrages
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

PHP

# Installation des dépôts Remi
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

# Reset du module PHP (pour éviter des conflits)
sudo dnf module reset php

# Activation du module PHP 8.4 de Remi
sudo dnf module enable php:remi-8.4

# Installation des extensions PHP
sudo dnf install -y \
    # Base
    php84-php-common \       # Extensions communes
    php84-php-cli \          # Interface en ligne de commande PHP
    # Production
    php84-php-fpm \          # FastCGI Process Manager
    php84-php-opcache \      # Optimisation des performances
    # Selon les besoins de l'application
    php84-php-dom \          # Manipulation de documents XML/HTML
    php84-php-pdo_pgsql \    # Support PostgreSQL
    php84-php-xml \          # Support XML
    php84-php-intl \         # Fonctions internationales
    php84-php-mbstring \     # Support des chaînes multi-octets
    php84-php-zip            # Gestion des archives ZIP

Pourquoi utiliser les dépôts Remi ? Parce que les dépôts officiels de Rocky Linux sont assez conservateurs en termes de versions de logiciels : actuellement, il ne contient que la version 8.2. Remi permet d'avoir des versions plus récentes, telle que la 8.4.

Configuration PHP

Toutes les modifications apportées à la configuration PHP (située habituellement dans le php.ini) sont ici centralisées dans un nouveau fichier, afin de pouvoir ensuite les retrouver, les déplacer ou les migrer facilement.

Ce fichier est /etc/opt/remi/php84/php.d/production.ini :

; Gestion des erreurs
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
error_log = /var/log/php/errors.log

; Performances
opcache.enable = 1

; Timezone
date.timezone = Europe/Paris

PHP-FPM

Une fois PHP configuré, on peut ensuite activer et démarrer le service PHP-FPM:

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

VirtualHost & HTTPS

Un certificat auto-signé généré est pratique mais uniquement destiné au développement. En production, préférez Let's Encrypt, un certificat commercial ou émis par votre organisation.

# Génération d'un certificat SSL auto-signé
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/pki/tls/private/httpd-app-selfsigned.key \
    -out /etc/pki/tls/certs/httpd-app-selfsigned.crt \
    -subj "/C=FR/ST=Region/L=Ville/O=Organisation/CN=localhost"

On peut alors configurer un virtual host pour l'application. Cette configuration se place dans /etc/httpd/conf.d/00-app.conf :

<VirtualHost _default_:80>
  ServerName localhost
  Redirect permanent / https://localhost
</VirtualHost>

<VirtualHost *:443>
    ServerName localhost
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/httpd-app-selfsigned.crt
    SSLCertificateKeyFile /etc/pki/tls/private/httpd-app-selfsigned.key

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Redémarrez Apache pour appliquer ces modifications :

sudo systemctl restart httpd

Nettoyage & sécurisation basique

Pour terminer, on peut désactiver la configuration Apache non nécessaire, comme la page d'accueil par défaut et la possibilité de naviguer dans les répertoires :

remove rm -f /etc/httpd/conf.d/{autoindex.conf,userdir.conf,welcome.conf}

On peut également ajouter un fichier de configuration global, qui s'appliquera à tous les virtual hosts:

Par exemple, créer un fichier /etc/httpd/conf.d/security.conf :

# Désactive l'affichage des informations système
ServerSignature Off
ServerTokens Prod

Debug

Cette commande permet d'afficher la liste des virtual hosts actuellement configurés sur le serveur :

httpd -t -D DUMP_VHOSTS

Logs

Ces deux commandes permettent ensuite d'accéder aux logs des services Apache & PHP FPM :

# Logs Apache
sudo journalctl -u httpd

# Logs PHP-FPM
sudo journalctl -u php84-php-fpm

Voir aussi

Un exemple de la mise en place d'Apache & PHP-FPM sur Debian via Docker est disponible ici:

Ressources