2011-05-17 19:55:14 +0000 2011-05-17 19:55:14 +0000
393
393

Hoe controleer je welke apache modules zijn aangezet/geïnstalleerd?

Wat is de meest elegante manier om te controleren welke apache modules zijn aangezet?

Antwoorden (11)

483
483
483
2011-05-17 20:01:43 +0000

Je bent op Ubuntu dus probeer:

apache2ctl -M
120
120
120
2011-05-17 19:56:42 +0000

httpd -M vertelt u welke modules ingebouwd of gedeeld zijn.

37
37
37
2012-04-11 09:10:50 +0000

Niets van bovenstaande antwoorden werkt als je geen commando’s kunt uitvoeren op een externe server. Als je alleen “user” rechten hebt of helemaal geen rechten, probeer dan test.php script te maken:

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

Hoewel het alleen werkt als PHP is geïnstalleerd als mod_php.

28
28
28
2015-05-04 11:33:10 +0000

Misschien helpt dit voor sommige mensen op gedeelde hosts zonder toegang tot httpd, apachectl of processen:

Ingeschakelde modules: ls /etc/apache2/mods-enabled/

Beschikbare modules: ls /etc/apache2/mods-available/

18
18
18
2013-02-06 07:04:37 +0000

U kunt ook gebruik maken van apachectl apachectl -t -D DUMP_MODULES

14
14
14
2011-05-17 20:57:05 +0000

Ik denk dat er eigenlijk drie vragen zijn. Ik weet niet zeker welke je vraagt.

  • Welke modules heb je op schijf. Wat zijn alle modules die je kunt gebruiken.

Dit zou (meestal) in de modules directory van je apache distributie staan, meestal /etc/httpd/modules/

  • Welke modules is elke specifieke instantie geconfigureerd om te draaien.

Dit kan worden gecontroleerd met /usr/sbin/httpd -M, in ieder geval voor het basissysteem apache. Als u een specifiek configuratiebestand /usr/sbin/httpd -M -f /path/to/config/file

  • What’s in a running apache

wilt controleren, kunt u dit zien met http://machinename/server-info/ Dit is niet standaard geconfigureerd, u moet configureren het in. Het is een beetje een informatielek, dus configureer het zo dat alleen lokale mensen het kunnen zien.

Als je op de machine zit en je hebt toegang om de draaiende gebruiker te zijn, kun je ook zien wat er geladen is door het proces te controleren. Je kunt het ouderproces vinden met:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

.

11
11
11
2014-03-11 18:41:39 +0000

Als je op Redhat/CentOS zit, wordt httpd gebruikt in plaats van apache2ctl.

Dit betekent dat je de

httpd -M

moet gebruiken. httpd zit echter bijna nooit in het pad dat je verwacht.

Ik kan op CentOS 5.8 bevestigen dat het eigenlijke pad /usr/sbin/httpd is.

/usr/sbin/httpd -M

Maar als dat niet het pad is, kun je het ontdekken. Hier is hoe ik dat heb kunnen doen.

Eerst heb ik de daemon gecontroleerd die gebruikt wordt om het aan te sturen.

less /init.d/httpd

Rond de lijn 40ish

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd

die me precies vertelde waar ik het kon vinden. Ik hoop dat dit helpt.

5
5
5
2016-08-30 12:23:45 +0000

Lijst van alle ingeschakelde modules

a2query -m
3
3
3
2014-05-21 22:35:14 +0000

Op mijn ezelsbruggetje kan ik apache2ctl modules uitvoeren en de vermelde modules zien.

2
2
2
2016-04-11 17:36:03 +0000

Controle van binnen php script (voor mod_xsendfile): if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler')) && in_array('mod_xsendfile', apache_get_modules())) \doSomething();

De controle voor PHP_SAPI is om uit te sluiten wanneer php als CGI draait, aangezien apache_get_modules() niet werkt in die context. Bovendien, als dit wordt uitgevoerd op php< 5.0.0, zal alleen de apache2handler context het verwachte resultaat opleveren.

1
1
1
2018-07-19 16:20:26 +0000

Ik heb een klein pythonscriptje gemaakt om je te helpen. Kijk eens naar https://github.com/zioalex/unusedapachemodules

Dit is wat je ervan kunt verwachten:

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']