Les fichiers de configuration PHP, tels que php.ini et php-fpm.conf, jouent un rôle crucial dans l'optimisation des serveurs web, que ce soit pour Apache ou Nginx. Voici des recommandations pour améliorer la sécurité et l'efficacité.
- Activation du mode sécurisé : Le mode sécurisé de PHP permet de restreindre l'exécution de fonctions potentiellement dangereuses. Configurez le paramètre suivant : ```
safe_mode = On
Cela vérifie que le script et les fichiers manipulés appartiennent au même propriétaire. - Sécurité des groupes d'utilisateurs : Lorsque le mode sécurisé est actif, désactivez l'accès basé sur les groupes pour éviter des vulnérabilités : ```
safe_mode_gid = Off
Par défaut, cette option est désactivée dans PHP 5.3.27. - Désatcivation des fonctions risquées : Pour empêcher l'exécution de commandes système, ajoutez : ```
disable_functions = exec, passthru, shell_exec, system, popen, phpinfo
Cela bloque ces fonctions même sans le mode sécurisé. - Masquage des informations PHP : Évitez de divulguer la version de PHP dans les en-têtes HTTP : ```
expose_php = Off
Cela réduit les risques d'attaques ciblées. - Désenregistrement des variables globales : Pour empêcher l'enregistrement automatique des variables soumises via POST ou GET : ```
register_globals = Off
Cela renforce la sécurité en limitant l'accès direct aux données. - Prévention des injections SQL : Activez l'échappement automatique des caractères spéciaux : ```
magic_quotes_gpc = On
Cela convertit les apostrophes et autres symboles pour prévenir les injections SQL. - Gestion des erreurs : Désactivez l'affichage des erreurs en production et activez la journalisation : ```
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
Assurez-vous que le fichier de log a les permissions d'écriture adéquates. - Limitatino des ressources :
- Temps d'exécution maximal par script : ```
max_execution_time = 30
Réglez sur 0 pour aucune limite, mais cela peut causer des problèmes de performance. - Limite de mémoire par script : ```
memory_limit = 128M
Utilisez -1 pour désactiver la limite, mais cela risque d'épuiser les ressources. - Temps maximal d'analyse des entrées : ```
max_input_time = 60
Cela affecte le traitement des données POST, GET et uploads. - Taille maximale des fichiers uploadés : ```
upload_max_filesize = 10M
Augmentez cette valeur selon les besoins, par exemple pour les applications multimédias.
- Temps d'exécution maximal par script : ```
max_execution_time = 30
- Paramètres de sécurité supplémentaires :
- Empêcher l'ouverture d'URL distantes pour éviter les failles d'inclusion : ```
allow_url_fopen = Off
Cela bloque l'accès à des fichiers externes via des variables non sécurisées. - Corriger les problèmes d'analyse des chemins pour Nginx : ```
cgi.fix_pathinfo = 0
Cela renforce la sécurité en désactivant la résolution automatique des chemins.
- Empêcher l'ouverture d'URL distantes pour éviter les failles d'inclusion : ```
allow_url_fopen = Off
- Gestion des sessions : Pour une architecture distribuée, utilisez un stockage partagé : ```
session.save_handler = memcache
session.save_path = "tcp://192.168.1.50:11211"
Cela permet de partager les sessions entre plusieurs serveurs via Memcached. L'adresse IP et le port doivent correspondre à votre configuration Memcached.
Pour les serveurs utilisant php-fpm avec Nginx, voici des paramètres recommandés dans php-fpm.conf :
pid = /run/php-fpm.pid
error_log = /var/log/php-fpm_error.log
log_level = warning
rlimit_files = 65535
events.mechanism = epoll
listen.owner = www-data
listen.group = www-data
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 10
pm.max_spare_servers = 50
pm.process_idle_timeout = 10s
pm.max_requests = 1024
slowlog = /var/log/php-fpm_slow.log
request_slowlog_timeout = 5
Pour améliorer les performences, activez et configurez OPcache dans php.ini :
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 300
opcache.fast_shutdown = 1
opcache.enable_cli = 0