Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
linux:apache [15-05-2012 12:09] – edmc73 | linux:apache [03-10-2019 14:26] (Version actuelle) – [htcacheclean] edmc73 | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
Cette page est juste un mémo | Cette page est juste un mémo | ||
+ | Docs => http:// | ||
+ | ===== Commandes utiles ===== | ||
+ | |||
+ | Tester les configs avant de faire un reload ou un restart | ||
+ | apache2ctl -t | ||
+ | |||
+ | reloader, restarter etc.. | ||
+ | service apache2 restart | ||
+ | / | ||
+ | apache2ctl restart | ||
+ | |||
+ | Afficher les modules chargés | ||
+ | apache2ctl -t -D DUMP_MODULES | ||
+ | ou | ||
+ | apache2ctl -M | ||
+ | |||
+ | D' | ||
+ | apache2ctl -h | ||
+ | |||
+ | Afficher le status | ||
+ | apache2ctl status | ||
+ | |||
+ | Encore plus détaillé | ||
+ | apache2ctl fullstatus | ||
+ | |||
+ | ===== Configuration de base ===== | ||
+ | |||
+ | La doc => http:// | ||
+ | |||
+ | Le minimum pour un accès avec un nom de domaine | ||
+ | <code apache> | ||
+ | # Apache doit écouter sur le port 80 | ||
+ | Listen 80 | ||
+ | |||
+ | # Toutes les adresses IP doivent répondre aux requêtes sur les | ||
+ | # serveurs virtuels | ||
+ | NameVirtualHost *:80 | ||
+ | |||
+ | < | ||
+ | DocumentRoot / | ||
+ | ServerName www.example1.com | ||
+ | |||
+ | # Autres directives ici | ||
+ | |||
+ | </ | ||
+ | |||
+ | < | ||
+ | DocumentRoot / | ||
+ | ServerName www.example2.org | ||
+ | |||
+ | # Autres directives ici | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Les directives | ||
+ | <code apache> | ||
+ | < | ||
+ | AllowOverride None | ||
+ | Options Indexes FollowSymLinks | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Les options | ||
+ | |||
+ | * AllowOverride None / All : permet la prise en compte des fichiers .htaccess (plus d' | ||
+ | * Options : par défaut All (toutes les options sauf MultiViews). Plus d' | ||
+ | * None : Désactive toutes les fonctions | ||
+ | * ExecCGI : Exécution de scripts CGI permise | ||
+ | * FollowSymLinks : Permet au serveur de suivre les liens symboliques | ||
+ | * Indexes : Affiche la liste des fichiers contenu dans le répertoire si aucun fichier index.html/ | ||
+ | * MultiViews : Permet au serveur d' | ||
+ | |||
+ | Accès par mot de passe | ||
+ | <code apache> | ||
+ | #accès au fichier de mot de passe généré par la commande htpasswd | ||
+ | AuthUserFile .htpasswd | ||
+ | AuthGroupFile /dev/null | ||
+ | AuthName "Ce message s' | ||
+ | AuthType Basic | ||
+ | <Limit GET POST> | ||
+ | require valid-user | ||
+ | </ | ||
+ | </ | ||
===== Installation de Apache2-mpm-worker ===== | ===== Installation de Apache2-mpm-worker ===== | ||
+ | http:// | ||
+ | |||
Voici les paquets standards à installer | Voici les paquets standards à installer | ||
Ligne 127: | Ligne 213: | ||
par | par | ||
create 644 root adm | create 644 root adm | ||
+ | |||
+ | |||
+ | ==== internal dummy connection ==== | ||
+ | |||
+ | --- source: https:// | ||
+ | |||
+ | Si vous avez plein de log apache avec des lignes **internal dummy connection**, | ||
+ | |||
+ | # Filters | ||
+ | SetEnvIf Remote_Addr " | ||
+ | SetEnvIf Remote_Addr " | ||
+ | |||
+ | Ensuite, on doit activer ce filtre le fichier de définition de votre site (sous le répertoire / | ||
+ | CustomLog / | ||
+ | |||
+ | Un restart d' | ||
| | ||
===== Lorsque Apache est installé dans un NAT à travers d'un reverse proxy ===== | ===== Lorsque Apache est installé dans un NAT à travers d'un reverse proxy ===== | ||
Ligne 164: | Ligne 266: | ||
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE | error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE | ||
+ | Ensuite on recharge apache2 | ||
+ | service apache2 reload | ||
+ | Quelques préconisations de configuration et sécurité => http:// | ||
+ | ===== ALERT - script tried to increase memory_limit ===== | ||
+ | |||
+ | Quand on a Wordpress d' | ||
+ | suhosin[20206]: | ||
| | ||
+ | On édite le fichier de config php qui ici tourne comme un cgi **/ | ||
+ | ; Maximum amount of memory a script may consume (128MB) | ||
+ | ; http:// | ||
+ | memory_limit = 256M | ||
+ | |||
+ | ===== Les mods d' | ||
+ | |||
+ | ==== expires ==== | ||
+ | |||
+ | doc : http:// | ||
+ | |||
+ | Il est important de mettre en cache certains fichiers qui ne bougent jamais comme les images, scripts js et fichiers css. Le cache en question est situé côté client et économisera de la bande passante sur le serveur. | ||
+ | |||
+ | < | ||
+ | ExpiresActive On | ||
+ | ExpiresByType image/gif " | ||
+ | ExpiresByType image/jpg " | ||
+ | ExpiresByType image/jpeg " | ||
+ | ExpiresByType image/png " | ||
+ | ExpiresByType image/ | ||
+ | ExpiresByType text/css " | ||
+ | ExpiresByType application/ | ||
+ | </ | ||
+ | |||
+ | ===== mod_fcgid: read data timeout in 40 seconds ===== | ||
+ | |||
+ | Si vous voyez ça dans vos log, il vous faut rajouter ça dans **/ | ||
+ | |||
+ | IPCCommTimeout 240 | ||
| | ||
- | --- //auteur [[user:edmc73|edmc73]]// | + | ===== Tester les performances ===== |
+ | |||
+ | Avec **httperf** voir très bon tuto => http:// | ||
+ | |||
+ | Un outils intégré avec apache, **ab** pour apache benchmark | ||
+ | |||
+ | Pour tester une url avec 2000 requêtes dont 10 en simultanées | ||
+ | ab -c 10 -n 2000 ' | ||
+ | |||
+ | |||
+ | |||
+ | Pour envoyer en POST, créer un fichier **post.txt** avec les paramètres urlencodé | ||
+ | email=toto%40toto.fr& | ||
+ | |||
+ | Utilisez la commande suivante | ||
+ | ab -p post.txt -T ' | ||
+ | |||
+ | |||
+ | ===== Sécurité ===== | ||
+ | |||
+ | Pour cacher la version de apache et autre | ||
+ | vi / | ||
+ | |||
+ | ServerTokens Prod | ||
+ | ServerSignature Off | ||
+ | TraceEnable Off | ||
+ | |||
+ | Pour cacher la version de php, modifiez php.ini et configurer la variable suivante | ||
+ | expose_php = Off | ||
+ | |||
+ | |||
+ | ===== apache2-mpm-itk ===== | ||
+ | Après quelques années d' | ||
+ | |||
+ | La migration se fait sans douleurs avec un | ||
+ | apt-get install apache2-mpm-itk | ||
+ | |||
+ | Ceci remplace apache2-mpm-prefork et toute la config reste compatible sans problème. | ||
+ | |||
+ | Le mpm itk permet de choisir un uid:gid différent pour chaque virtual-host et ce sans avoir recours aux cgi ou aux modules suexec ou suphp, ce qui est extrêmement pratique dans le cadre d’un hébergement mutualisé ainsi que dans certains cas pratiques. | ||
+ | |||
+ | Coté sécurité, le mpm itk permet d’isoler la configuration de chaque vhost directement dans son fichier de configuration. | ||
+ | |||
+ | Il n'y a plus qu'a créer un utilisateur et de rajouter ces lignes dans vos config | ||
+ | < | ||
+ | AssignUserId username groupname | ||
+ | </ | ||
+ | |||
+ | Plus d'info : | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== En cas de piratage ===== | ||
+ | |||
+ | Restaurer une sauvegarde et comparer les répertoires avec **diff** | ||
+ | diff -qr repOK repHACKED | ||
+ | |||
+ | Recopier que les fichiers qui ont changé avec **rsync** | ||
+ | rsync -avP repOK repHACKED | ||
+ | |||
+ | Refaite un diff pour des nouveaux fichiers ne serait pas resté tout seul | ||
+ | |||
+ | |||
+ | |||
+ | Comparer les logs | ||
+ | |||
+ | |||
+ | ===== Debian 10 Apache 2.4 php7.3 ===== | ||
+ | |||
+ | Sur la dernière debian, apache est par défaut apache mpm event. | ||
+ | Plus question ici d' | ||
+ | |||
+ | apt install php7.3-fpm | ||
+ | a2enmod proxy_fcgi | ||
+ | a2enconf php7.3-fpm | ||
+ | systemctl restart apache | ||
+ | |||
+ | le module itk n'est plus nécessaire, | ||
+ | |||
+ | => doc: https:// | ||
+ | |||
+ | < | ||
+ | # cd / | ||
+ | # ls | ||
+ | www.conf | ||
+ | |||
+ | cp www.conf dev.conf | ||
+ | vi dev.conf | ||
+ | |||
+ | </ | ||
+ | |||
+ | On modifie au minimum | ||
+ | < | ||
+ | ; Start a new pool named ' | ||
+ | ; the variable $pool can be used in any directive and will be replaced by the | ||
+ | ; pool name (' | ||
+ | [dev] | ||
+ | |||
+ | ; Unix user/group of processes | ||
+ | ; Note: The user is mandatory. If the group is not set, the default user's group | ||
+ | ; will be used. | ||
+ | user = edmc | ||
+ | group = edmc | ||
+ | |||
+ | ; The address on which to accept FastCGI requests. | ||
+ | ; Valid syntaxes are: | ||
+ | ; ' | ||
+ | ; a specific port; | ||
+ | ; ' | ||
+ | ; a specific port; | ||
+ | ; ' | ||
+ | ; (IPv6 and IPv4-mapped) on a specific port; | ||
+ | ; ' | ||
+ | ; Note: This value is mandatory. | ||
+ | listen = / | ||
+ | </ | ||
+ | |||
+ | ensuite on adapte notre config apache | ||
+ | < | ||
+ | < | ||
+ | SetHandler " | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | on restart php et apache | ||
+ | systemctl restart php7.3-fpm.service apache2.service | ||
+ | |||
+ | et voila :) | ||
+ | |||
+ | ===== htcacheclean ===== | ||
+ | |||
+ | Activez les modules | ||
+ | a2enmod mod_cache mod_cache_disk | ||
+ | |||
+ | Dans la config du site, pour un cache de 60 secondes | ||
+ | <code apache> | ||
+ | < | ||
+ | < | ||
+ | #LogLevel debug | ||
+ | CacheRoot / | ||
+ | CacheDefaultExpire 60 | ||
+ | CacheMinExpire 60 | ||
+ | CacheMaxExpire 60 | ||
+ | CacheEnable disk / | ||
+ | # | ||
+ | CacheHeader On | ||
+ | CacheIgnoreCacheControl On | ||
+ | CacheIgnoreNoLastMod On | ||
+ | CacheStoreNoStore On | ||
+ | CacheStoreExpired On | ||
+ | # | ||
+ | # | ||
+ | #UnsetEnv no-cache | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Voir les fichiers en cache | ||
+ | htcacheclean -A -p/ | ||
+ | |||
+ | Si vous avez configuré un autre répertoire que celui par défaut, la purge ne se fera pas, mettez un cron | ||
+ | 0 */2 * * * / | ||
+ | |||
+ | Cette exemple purge toutes les 2 heures en vérifiant que la taille globale ne dépasse pas 100Mo, '' |