Comment vérifier quels modules apache sont activés/installés ?
Quelle est la manière la plus élégante de vérifier quels modules apache sont activés ?
Quelle est la manière la plus élégante de vérifier quels modules apache sont activés ?
Vous êtes sur Ubuntu alors essayez :
apache2ctl -M
httpd -M
vous indiquera quels modules sont intégrés ou partagés.
Rien de ce qui précède ne fonctionne si vous ne pouvez pas exécuter de commandes sur un serveur distant. Si vous n'avez que des privilèges “utilisateur” ou aucun, essayez de créer le script test.php
:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Bien qu'il ne fonctionne que si PHP est installé en tant que mod_php
.
Peut-être cela aidera-t-il certaines personnes sur des hôtes partagés n'ayant pas accès à httpd
, apachectl
ou aux processus :
Modules activés : ls /etc/apache2/mods-enabled/
Modules disponibles : ls /etc/apache2/mods-available/
Je pense qu'il y a en fait trois questions ici. Je ne suis pas sûr de savoir laquelle vous demandez.
Cela se trouve (habituellement) dans le répertoire modules de votre distribution apache, habituellement /etc/httpd/modules/
Cela peut être vérifié avec /usr/sbin/httpd -M, au moins pour le système de base apache. Si vous voulez vérifier un fichier de configuration spécifique /usr/sbin/httpd -M -f /path/to/config/file
Pour obtenir beaucoup d'informations, vous pouvez le voir avec http://machinename/server-info/ Ce n'est pas configuré par défaut, vous devez le configurer dans. Si vous êtes sur la machine et que vous avez l'accès pour être l'utilisateur en cours d'exécution, vous pouvez également voir ce qui est chargé en vérifiant le processus. Vous pouvez trouver le processus parent avec :
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
Puis vérifiez
cat /proc/PID_FROM_ABOVE/maps
Si vous êtes sur Redhat/CentOS, httpd
est utilisé à la place de apache2ctl
.
Cela signifie que vous devez utiliser le
httpd -M
Cependant, httpd
n'est presque jamais dans le chemin que vous attendez.
Je peux confirmer sur CentOS 5.8 que le chemin réel est /usr/sbin/httpd
.
/usr/sbin/httpd -M
Mais si ce n'est pas le chemin, vous pouvez le découvrir. Voici comment j'ai pu le faire.
D'abord, j'ai vérifié le démon utilisé pour le contrôler.
less /init.d/httpd
Autour de la ligne 40ish
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
Qui m'a dit exactement où le trouver. J'espère que cela vous aidera.
Liste de tous les modules activés
a2query -m
Sur ma gentoo, je peux exécuter apache2ctl modules
et voir la liste des modules.
Vérification à partir du script php (pour mod_xsendfile) :
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\doSomething();
La vérification pour PHP_SAPI est à exclure lorsque php est exécuté en tant que CGI, car apache_get_modules() ne fonctionne pas dans ce contexte. De plus, si cette fonction est exécutée sur php < 5.0.0, seul le contexte apache2handler
produira le résultat attendu.
J'ai créé un petit script en python pour vous aider. Veuillez consulter https://github.com/zioalex/unused_apache_modules
Voici ce que vous pouvez en attendre :
curl http://localhost/server-info > http_modules_test.txt
cat http_modules_test.txt| python find_unused_apache_mod.py
1
Module name mod_python.c
Configuration Phase Participation: 4
Request Phase Participation: 11
Current Configuration: 3
2
Module name mod_version.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 1
3
Module name mod_proxy_connect.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 0
To remove safely:
['mod_proxy_connect.c']
POPPED: mod_proxy_connect.c
To KEEP: ['mod_python.c', 'mod_version.c', 'mod_proxy_connect.c']