APACHE + PHP
+------------------+ | Utilisateurs | +---------+--------+ | v +---------------------------+ | Apache + PHP | +-------------+-------------+ | | v v +---------------+ +----------------------------+ | /var/www/html | | /var/www/nomdedomaine.fr | | default | | site2 | +---------------+ +----------------------------+
Instal apache & PHP
apt install apache2 -y systemctl status apache2 apt install php libapache2-mod-fcgid libapache2-mod-php php-mysql php-xml php-mbstring php-curl -y # dernière version stable apt remove --purge php libapache2-mod-php php-mysql php-xml php-mbstring php-curl -y # dépôts de Sury apt install -y apt-transport-https lsb-release ca-certificates wget gnupg wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list apt update apt install php8.3 php8.3-mysql php8.3-xml php8.3-fpm php8.3-mbstring php8.3-curl libapache2-mod-php8.3 -y apt remove --purge php php8.2* libapache2-mod-php8.2 -y apt autoremove --purge -y a2dismod php8.2 fcgid # Désactiver mod_php et fcgid (inutile avec PHP-FPM) a2enconf php8.3-fpm # Apache de déléguer le traitement des scripts à un serveur FastCGI (ne charge pas PHP dans Apache lui-même ), plus performant et sécurisé a2enmod proxy_fcgi setenvif # Activer les modules nécessaires au proxy FastCGI systemctl reload apache2 # Recharger Apache apachectl -S # permet de récupérer des informations sur la configuration d'Apache. http://votre_ip/ http://name_serveur/ echo "<?php phpinfo();?>" | tee /var/www/html/info.php bash -c 'echo "<?php phpinfo();" > /var/www/html/info.php && chmod 644 /var/www/html/info.php' # 🔍 Tester la configuration Apache apachectl configtest # Teste la syntaxe des fichiers de conf (à faire AVANT un reload !) # 🟢 Démarrer / redémarrer / arrêter Apache systemctl start apache2 # Démarre Apache systemctl stop apache2 # Arrête Apache systemctl restart apache2 # Redémarre Apache (arrêt + démarrage complet) systemctl reload apache2 # Recharge la conf SANS couper les connexions (gracieux) systemctl status apache2 # Affiche l’état du service Apache (actif, erreurs, etc.) # 📋 Statut détaillé (version + modules + virtualhosts) apache2ctl status # Affiche un mini résumé du service Apache apache2ctl fullstatus # Plus détaillé (nécessite mod_status activé et accessible) apache2ctl -S # Liste les VirtualHosts, ports, fichiers de conf utilisés # 🔁 Redémarrage sans perte de connexions apache2ctl graceful # Recharge les fichiers de configuration et relance les processus enfants sans tout couper apache2ctl graceful-stop # Arrête Apache proprement, après avoir terminé les connexions actives # 🧠 Autres utiles apache2ctl -M # Liste des modules Apache chargés apache2ctl -V # Affiche la version Apache et les chemins de compilation apache2ctl help # Liste des options disponibles tail -f /var/log/apache2/error.log tail -f /var/log/apache2/access.log
Modules Apache compatibles avec PHP
Apache peut exécuter du PHP via plusieurs modules. Toutefois, un seul doit être actif par VirtualHost pour éviter tout conflit.
Module | Description | Utilisation recommandée | Statut |
---|---|---|---|
mod_php (libapache2-mod-php) |
PHP est chargé directement dans Apache. Simple à configurer, adapté au développement local. |
Développement local, petits projets | ✅ Classique (mais dépassé en prod) |
mod_fcgid (libapache2-mod-fcgid) |
Apache utilise FastCGI pour exécuter PHP via le binaire PHP-FPM. Permet de gérer plusieurs versions PHP. |
Mutualisé, multi-utilisateur, production | ✅ Moderne |
proxy_fcgi + php8.x-fpm |
Apache proxy les requêtes PHP vers PHP-FPM (via socket ou TCP). La méthode recommandée aujourd’hui. |
Production, multi-version PHP | ✅ Recommandé |
mod_fastcgi |
Ancien module FastCGI, non maintenu. Remplacé par mod_fcgid. |
À éviter | ❌ Obsolète |
mod_cgi / mod_cgid |
Exécute PHP en mode CGI pur. Très lent et inefficace en production. |
Cas extrêmes, dépannage | ⚠️ À éviter |
<VirtualHost *:80> ServerName mon-site.local DocumentRoot /var/www/mon-site/httpdoc <Directory /var/www/mon-site/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> # Rediriger les requêtes PHP vers PHP-FPM via proxy_fcgi <FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch> ErrorLog ${APACHE_LOG_DIR}/mon-site_error.log CustomLog ${APACHE_LOG_DIR}/mon-site_access.log combined </VirtualHost># Les Modules : a2enmod fcgid a2enmod rewrite a2enmod proxy a2enmod proxy_fcgi a2enmod ssl [Install] apt install nom_du_module a2enmod nom_du_module systemctl restart apache2 [Remove] a2dismod nom_du_module apt remove --purge nom_du_module systemctl restart apache2
Paquet | Description | Utilisation typique | Nécessaire pour |
---|---|---|---|
libapache2-mod-php |
Module Apache qui intègre directement PHP dans Apache. | Exécution de scripts PHP sans passerelle externe. | Sites simples sans PHP-FPM |
php-mysql |
Extension PHP pour se connecter à des bases de données MySQL/MariaDB. | Accès aux BDD via PDO ou mysqli. | CMS, ERP, CRM avec base MySQL |
php-xml |
Extension pour le traitement XML (DOM, SimpleXML, etc.). | Lecture et génération de fichiers XML, SOAP, etc. | APIs, formats e-facture, flux RSS |
php-mbstring |
Support des chaînes multi-octets (UTF-8, etc.). | Traitement de texte multilingue. | Applications avec accents, caractères spéciaux |
php-curl |
Extension pour faire des requêtes HTTP via CURL (API REST, etc.). | Connexion à des services distants. | API, paiement en ligne, webhooks |
libapache2-mod-fcgid |
Module Apache pour exécuter des scripts via FastCGI (ex: PHP-FPM). | Passerelle entre Apache et PHP-FPM. | Performance, sécurité, multi-version PHP |
Module | libapache2-mod-php | libapache2-mod-fcgid |
---|---|---|
Nom complet | Module PHP intégré à Apache (mod_php) | Module FastCGI pour Apache (mod_fcgid) |
Fonctionnement | PHP est chargé **directement** dans Apache | Apache délègue à un **serveur externe** comme PHP-FPM via FastCGI |
Architecture | Monolithique (Apache + PHP = même processus) | Séparée (Apache ↔ PHP via socket ou TCP) |
Gestion des processus | Pas d’isolation par site ou utilisateur | Chaque pool PHP-FPM peut avoir ses propres droits, limites, logs |
Multi-version PHP | ❌ Non (une seule version active à la fois) | ✅ Oui (chaque site peut pointer vers une version différente de PHP-FPM) |
Performance | ⚠️ Moins bon sous forte charge (Apache + PHP partagent les ressources) | ✅ Meilleure montée en charge (processus indépendants) |
Sécurité | Moins isolé (Apache exécute PHP avec ses propres droits) | ✅ Meilleure séparation des privilèges |
Compatibilité | Très simple à mettre en place (prêt à l’emploi pour des scripts PHP simples) |
Nécessite PHP-FPM, configuration légèrement plus complexe |
Cas d’usage recommandé | Développement local, projets simples, serveurs mono-site | Serveurs multi-sites, hébergement mutualisé, production |
VirtualHost et FastCGI : directive PHP
Supprimer le maximum d'informations dans les en-têtes HTML renvoyées par Apache,
nano /etc/apache2/conf-available/security.conf
ServerTokens Prod # Masquer la version d'Apache
ServerSignature Off # Supprimer les informations de signature d'Apache
Header unset X-Powered-By # Supprimer l'en-tête 'X-Powered-By' pour PHP (et autres langages si nécessaire)
Configurer son nom de domaine : nomdedomaine.fr
mkdir -p /var/www/nomdedomaine.fr/httpdoc #crée le dossier du site (et les dossiers parents si besoin) chown -R www-data:www-data /var/www/nomdedomaine.fr # donne les droits à Apache/Nginx (www-data) chmod -R 755 /var/www/nomdedomaine.fr # rend le dossier accessible (lecture/exécution) au serveur apt install php8.4-{mbstring,xml,curl,mysql,zip,gd,cli,fpm,opcache,intl,bcmath} -y a2dismod php8.3 fcgid a2enconf php8.4-fpm # Active la configuration FPM pour PHP 8.4 a2enmod proxy_fcgi setenvif systemctl reload apache2
nano /etc/apache2/sites-available/nomdedomaine.fr.conf
selectionne VirtualHost pour pointer vers le bon socket
<VirtualHost *:80>
ServerAdmin webmaster@nomdedomaine.fr
ServerName nomdedomaine.fr
ServerAlias www.nomdedomaine.fr
DocumentRoot /var/www/nomdedomaine.fr
#DocumentRoot /var/www/nomdedomaine.fr/httpdoc
<Directory /var/www/nomdedomaine.fr>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nomdedomaine.fr-error.log
CustomLog ${APACHE_LOG_DIR}/nomdedomaine.fr-access.log combined
# Pass PHP scripts to FastCGI process manager
<FilesMatch \.php$>
# SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
# SetHandler application/x-httpd-php
# SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
a2ensite nomdedomaine.fr
systemctl restart apache2
# 🧠 Autres utiles
a2dissite /var/www/nomdedomaine.fr
Le fichier hosts
Le fichier hosts
est un fichier système qui permet de faire une correspondance entre un nom de domaine et une adresse IP, localement, sans passer par un serveur DNS.
📌 Cas d'usage
- Travailler sur un site en local avec un nom de domaine fictif (
admin.dev
,monsite.test
, etc.) - Rediriger un domaine vers une IP précise pour des tests
- Forcer un domaine à pointer vers une version particulière d’un serveur (utile pour le débogage DNS)
🔧 Exemple d’entrée
192.168.1.100 monsite.local www.monsite.local
📁 Emplacements du fichier hosts
- Linux / macOS :
/etc/hosts
- Windows :
C:\Windows\System32\drivers\etc\hosts
🧪 Autres exemples de configuration
ton.ip mon.domaine www.mon.domaine
NameVirtualHost ip.du.pc
🌐 Accès dans le navigateur
Une fois configuré, tu peux simplement accéder au site via :
http://monsite.local
Supprimer APACHE & PHP
# 🛑 Arrête le service Apache pour éviter les erreurs pendant la suppression systemctl stop apache2 # 🧹 Supprime complètement Apache et ses composants principaux apt-get purge apache2 apache2-utils apache2-bin apache2.2-common -y # - apache2 : le paquet principal # - apache2-utils : outils comme ab (Apache Benchmark) # - apache2-bin : les exécutables Apache # - apache2.2-common : config générique, dépendances partagées (sur certaines anciennes versions) # ❌ Supprime PHP et les modules associés côté Apache apt remove --purge php libapache2-mod-php php-mysql php-xml php-mbstring php-curl -y # Cela supprime PHP, ses extensions MySQL, XML, CURL, MBString, et l'intégration Apache (`mod_php`) # 🧨 Supprime les dossiers de configuration Apache rm -rf /etc/apache2 # Contient tous les VirtualHosts, mods-enabled, conf-enabled… # 🧨 Supprime le dossier racine du site par défaut rm -rf /var/www/html # Le site de test affiché par défaut (page "It works!") # 🧨 Supprime les logs Apache rm -rf /var/log/apache2 # Accès et erreurs, logs par VirtualHost # 🧽 Nettoyage des dépendances orphelines apt-get autoremove -y # Supprime tous les paquets installés automatiquement devenus inutiles après les purges
Le certificat SSL : letsencrypt