Yanıtlar:
Ubuntu'dasın, öyleyse dene:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
ancak bunlar ne manpage ne de içinde listelenmiştir apache2ctl --help
. Bunun sebebi, teslim edildikleridir httpd
. Yalnızca httpd belgelerinde listelenmiştir .
httpd -M
Hangi modüllerin yerleşik veya paylaşımlı olduğunu size söyleyecektir.
httpd
çalıştırılabilir dosyanın tam yolunu belirtin .
apache2
ve değil httpd
, bu yüzden bulunamamıştır.
Uzak sunucuda komutları çalıştıramazsanız yukarıdaki cevaplardan hiçbiri işe yaramaz. Yalnızca “kullanıcı” ayrıcalıklarına sahipseniz veya hiçbiri test.php
komut dosyası oluşturmayı denemiyorsa :
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Ancak PHP olarak kuruluysa çalışacaktır mod_php
.
Belki bu hiç erişimi olan paylaşılan ana bazı insanlar için yardımcı olacaktır httpd
, apachectl
ya da süreçler:
Etkin modüller: ls /etc/apache2/mods-enabled/
Mevcut modüller: ls /etc/apache2/mods-available/
Burada aslında üç soru olduğunu düşünüyorum. Hangisini istediğinden emin değilim.
Bu (genellikle) apache dağıtımınızın modüller dizininde olur, genellikle / etc / httpd / module /
Bu, en azından temel sistem apache'si için / usr / sbin / httpd -M ile kontrol edilebilir. Belirli bir yapılandırma dosyasını kontrol etmek istiyorsanız / usr / sbin / httpd -M -f / yol / to / config / dosya
Çok fazla bilgi edinmek için http: // machinename / server-info / ile görebilirsiniz. Bu varsayılan olarak yapılandırılmamıştır , yapılandırmanız gerekir. bu yüzden sadece yerel insanlar görebilir.
Makinedeyseniz ve çalışan kullanıcı olmaya erişiminiz varsa, işlemi kontrol ederek nelerin yüklendiğini de görebilirsiniz. Ana süreci aşağıdakilerle bulabilirsiniz:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
O zaman kontrol et
cat /proc/PID_FROM_ABOVE/maps
Redhat / CentOS'taysanız, httpd
bunun yerine kullanılır apache2ctl
.
Bu, kullanmanız gereken anlamına gelir.
httpd -M
Ancak, httpd
neredeyse asla beklediğiniz yolda değildir.
CentOS 5.8'de asıl yolun olduğunu onaylayabilirim /usr/sbin/httpd
.
/usr/sbin/httpd -M
Fakat bu yol değilse, onu keşfedebilirsiniz. İşte bunu yapabildim.
İlk önce kontrol etmek için kullanılan cini kontrol ettim.
less /init.d/httpd
Çizgi 40ish etrafında
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
Bu bana tam olarak nerede bulacağımı söyledi. Bu yardımcı olur umarım.
Tüm etkin modülleri listele
a2query -m
Gentoo üzerinde apache2ctl modules
listelenen modülleri çalıştırabilir ve görebilirim.
Php betiğinin içinden kontrol etme (mod_xsendfile için):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\\doSomething();
PHP_SAPI'nin kontrolü, php'nin CGI olarak çalıştığı zaman, apache_get_modules () bu bağlamda çalışmadığı için hariç tutulmalıdır . Ek olarak, eğer bu <5.0.0 php'de çalıştırılıyorsa, sadece apache2handler
içerik beklenen sonucu verecektir.
Size yardımcı olmak için küçük bir python betiği oluşturdum. Lütfen https://github.com/zioalex/unused_apache_modules adresini ziyaret edin.
Ondan bekleyebileceğiniz şey bu:
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']