Apache - PHP : optimisation affichage et caches
De wikiGite
Sommaire
Gestionnaire de cache APC
Sur Debian :
apt-get install php-apc
Le paquet fait les déclarations nécessaire dans Apache/PHP (/etc/php5/apache2/conf.d/apc.ini) et recharge Apache.
Sur CentOS / BlueOnyx : activer les dépôt de Remi, puis :
yum install --enablerepo=remi php-pecl-apc
Comme pour Debian, le paquet s'occupe du paramétrage d'Apache/PHP (/etc/php.d/apc.ini)
Gestionnaire de cache Eaccelerator
TODO
Varnish
TODO
Mod_deflate
Le module Apache mod_deflate permet de compresser à la volée les pages avant de les envoyer. La plupart des navigateurs récents savent interpréter et décompresser les pages. On l'active par
LoadModule deflate_module modules/mod_deflate.so LoadModule deflate_module modules/mod_deflate.so
dans le httpd.conf de CentOS ou les mods-enabled de Debian.
Puis éditer (ou créer) un fichier /etc/httpd/conf.d/mod_deflate.conf (sur CentOS/BlueOnyx) ou /etc/apache2/mods-available/deflate.conf (sur Debian) :
<IfModule mod_deflate.c> SetOutputFilter DEFLATE # these are known to be safe with MSIE 6 AddOutputFilterByType DEFLATE text/html text/plain text/xml # everything else may cause problems with MSIE 6 AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript AddOutputFilterByType DEFLATE application/rss+xml </IfModule>
Ci-dessous une version plus poussée des directives. ATTENTION, certains paramètres sont à optimiser selon la configuration et l'utilisation des sites, et à tester car ils peuvent occasionner un comportement non attendu d'Apache/PHP !
SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml text/x-js text/css application/x-javascript DeflateCompressionLevel 8 DeflateMemLevel 8 DeflateWindowSize 14 SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|exe|t?gz|zip|bz2?|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent env=!dont-vary
Note : le "SetOutputFilter DEFLATE" est souvent oublié mais s'avère nécessaire sur certaines versions d'Apache. Le mettre par défaut ne fait pas de mal.
Mod_expires
Il est intéressant aussi de modifier le temps d'expiration des images dans le cache. C'est géré côté serveur par le module mod_expires, qui indique aux navigateurs clients pendant combien de temps il doivent réutiliser une image mise localement en cache, plutôt que de la recharger à chaque fois (notamment : l'image de fond, affichée sur chaque page !).
Charger le module
LoadModule expires_module modules/mod_expires.so LoadModule expires_module modules/mod_expires.so
Désactiver les "Etag", qui ne font pas bon ménage avec les "Expires" :
Header unset ETag FileETag None
Puis, dans le répertoire racine, créer (ou ajouter à) un fichier .htaccess :
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 7200 seconds" ExpiresByType image/jpg "access plus 1500000 seconds" ExpiresByType image/jpeg "access plus 1500000 seconds" ExpiresByType image/png "access plus 1500000 seconds" ExpiresByType image/gif "access plus 1500000 seconds" AddType image/x-icon .ico ExpiresByType image/ico "access plus 1500000 seconds" ExpiresByType image/icon "access plus 1500000 seconds" ExpiresByType image/x-icon "access plus 1500000 seconds" ExpiresByType text/css "access plus 1500000 seconds" ExpiresByType text/javascript "access plus 1500000 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType application/xhtml+xml "access plus 7200 seconds" ExpiresByType application/javascript "access plus 7200 seconds" ExpiresByType application/x-javascript "access plus 1500000 seconds" ExpiresByType application/x-shockwave-flash "access plus 1500000 seconds" </IfModule>
Note pour Apache : la directive AddType ci-dessus n'est autorisée dans les .htaccess que si FileInfo est ajouté à AllowOverrride. Penser à l'autoriser dans la configuration du serveur.