Quel est le moyen le plus élégant 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.
Aucune des réponses ci-dessus ne fonctionne si vous ne pouvez pas exécuter de commandes sur un serveur distant. Si vous ne possédez que des privilèges «utilisateur» ou aucun, essayez de créer le script test.php
:
<pre>
<?php
print_r(Apache_get_modules());
?>
</pre>
Bien que cela ne fonctionne que si PHP est installé en tant que mod_php
.
Cela aidera peut-être certaines personnes sur des hôtes partagés sans accès à httpd
, apachectl
ou aux processus:
Modules activés: ls /etc/Apache2/mods-enabled/
Modules disponibles: ls /etc/Apache2/mods-available/
Vous pouvez également utiliser apachectl
apachectl -t -D DUMP_MODULES
Je pense qu'il y a en fait trois questions ici. Je ne suis pas sûr de ce que vous demandez.
Ce serait (généralement) dans le répertoire modules de votre distribution Apache, généralement/etc/httpd/modules /
Ceci 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/chemin/vers/config/fichier
Pour obtenir beaucoup d'informations, vous pouvez le voir avec http: // nom_ordinateur/info-serveur/ Ceci n'est pas configuré par défaut, vous devez le configurer il se trouve. C'est un peu d’une fuite d’informations, configurez-la pour que seules les personnes locales puissent la voir.
Si vous êtes sur la machine et que vous avez accès à 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}'
Alors check out
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.
Tout d'abord, j'ai vérifié le démon utilisé pour le contrôler.
less /init.d/httpd
Autour de la ligne 40
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
Ce qui m'a dit exactement où le trouver. J'espère que cela t'aides.
Lister tous les modules activés
a2query -m
Sur mon gentoo, je peux exécuter Apache2ctl modules
et voir les modules listés.
Vérification depuis un 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 de PHP_SAPI est à exclure lorsque php s'exécute en tant que CGI, car Apache_get_modules () ne fonctionne pas dans ce contexte. De plus, si cela est exécuté sur php <5.0.0, seul le contexte Apache2handler
produira le résultat attendu.
J'ai créé un petit script python pour vous aider. Veuillez regarder 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']