Comment vérifier quels modules Apache sont activés / installés?

381

Quel est le moyen le plus élégant de vérifier quels modules Apache sont activés?

tu fais
la source

Réponses:

465

Vous êtes sur Ubuntu alors essayez:

apache2ctl -M
Linker3000
la source
11
apache2ctl -M fonctionne très bien
udo
3
apache2 -M est le résultat de cette erreurapache2: bad user name ${APACHE_RUN_USER}
lundi
4
Assez juste - cela est dû au fait que vous n'exécutez pas la commande en tant qu'utilisateur d'exécution Apache (probablement www-data) défini dans la configuration d'Apache. Il existe un moyen de résoudre ce problème, mais vous pouvez aussi bien vous en tenir à apache2ctl.
Linker3000
9
sudo apache2ctl -M | sort
mmdemirbas
4
Notez qu'il existe de nombreuses options utiles (drapeaux) apache2ctlmais elles ne sont répertoriées ni dans la page de manuel ni dans apache2ctl --help. C'est parce qu'ils sont remis à httpd. Ils sont listés dans la documentation httpd uniquement.
Lutz Prechelt le
117

httpd -M vous dira quels modules sont intégrés ou partagés.

Ignacio Vazquez-Abrams
la source
hmm ... je reçois un message "bash: httpd: commande introuvable" lors du lancement de httpd -M en tant qu'utilisateur root
udo
Alors spécifiez le chemin complet de l' httpdexécutable.
Ignacio Vazquez-Abrams,
9
@ IgnacioVazquez-Abrams: Sous Ubuntu (et d'autres distributions basées sur Debian), le nom est apache2et non httpd, raison pour laquelle il n'est pas trouvé.
Daniel Andersson
3
Apache est httpd sur redhat. Essayez l'une des autres réponses si celle-ci ne fonctionne pas pour vous.
Jacks_Depression le
3
CentOS utilise également httpd au lieu de apache2
pedromanoel
37

Aucune des réponses ci-dessus 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 un test.phpscript:

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

Bien que cela ne fonctionne que si PHP est installé en tant que mod_php.

Yatsa
la source
4
En outre, vous ne voudrez pas que cela soit visible publiquement. Peut-être voudriez-vous limiter ce résultat aux clients avec l'adresse IP de l'administrateur. Et vous voudrez supprimer ce script dès que vous en aurez fini. Parce que la défense en profondeur; ne le rendez pas plus facile que cela doit être.
Parthian Shot
28

Peut - être que cela vous aidera pour certaines personnes sur des hôtes partagés sans accès à httpd, apachectlou processus:

Modules activés: ls /etc/apache2/mods-enabled/

Modules disponibles: ls /etc/apache2/mods-available/

CodeBrauer
la source
Voici la liste complète, filtrez-les
apache2ctl
18

Vous pouvez également utiliser apachectl

apachectl -t -D DUMP_MODULES
Eddie B
la source
13

Je pense qu'il y a en fait trois questions ici. Je ne suis pas sûr de ce que vous demandez.

  • Quels modules avez-vous sur le disque? Quels sont tous les modules que vous pouvez utiliser.

Ce serait (généralement) dans le répertoire modules de votre distribution Apache, généralement / etc / httpd / modules /

  • Quels modules est une instance spécifique configurée pour s'exécuter.

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 / chemin / vers / config / fichier

  • Qu'y a-t-il dans un apache en cours d'exécution

Pour obtenir beaucoup d'informations, vous pouvez le voir avec http: // nom_ordinateur / info-serveur / Ce n'est pas configuré par défaut, vous devez le configurer . C'est un peu une fuite d'informations, alors configurez-le de sorte que seules les populations locales peuvent le 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
Rich Homolka
la source
1
Des informations utiles, mais parce que l'OP utilise Ubuntu, les noms de fichier et les emplacements sont différents - par exemple: / usr / sbin / apache2 au lieu de httpd et ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' L'emplacement des modules est géré différemment, avec les sous-dossiers disponibles pour mods et ceux activés pour mods
Linker3000
Merci @ Linker3000 ... Vous avez raison, ceci est pour RedHat / Centos, je vais laisser votre commentaire se tenir sur la façon de convertir à Ubuntu
Rich Homolka
11

Si vous êtes sur Redhat / CentOS, httpdest utilisé à la place de apache2ctl.

Cela signifie que vous devez utiliser le

httpd -M

Cependant, ce httpdn’est presque jamais dans le chemin que vous attendez.

Je peux confirmer sur CentOS 5.8 le chemin réel /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 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.

chouette
la source
5

Lister tous les modules activés

a2query -m
MetalGodwin
la source
3

Sur mon gentoo, je peux exécuter apache2ctl moduleset voir les modules listés.

Grzegorz Golec
la source
2

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 apache2handlercontexte produira le résultat attendu.

noobish
la source
1

J'ai créé un petit script 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']
Alex
la source