Bagaimana cara memeriksa modul apache yang diaktifkan / diinstal?

Jawaban:

464

Anda berada di Ubuntu jadi cobalah:

apache2ctl -M
Linker3000
sumber
11
apache2ctl -M berfungsi dengan baik
udo
3
apache2 -M menghasilkan kesalahan iniapache2: bad user name ${APACHE_RUN_USER}
udo
4
Cukup adil - ini disebabkan oleh fakta bahwa Anda tidak menjalankan perintah sebagai apache run time user (mungkin www-data) yang didefinisikan dalam konfigurasi apache. Ada cara untuk memperbaikinya tetapi Anda mungkin juga tetap menggunakan apache2ctl.
Linker3000
9
sudo apache2ctl -M | sort
mmdemirbas
4
Perhatikan ada banyak opsi berguna (bendera) untuk apache2ctltetapi mereka tidak terdaftar di halaman manual atau di apache2ctl --help. Itu karena mereka diserahkan kepada httpd. Mereka terdaftar dalam dokumentasi httpd saja.
Lutz Prechelt
117

httpd -M akan memberi tahu Anda modul mana yang built-in atau dibagikan.

Ignacio Vazquez-Abrams
sumber
hmm ... Saya mendapatkan "bash: httpd: command not found" ketika meluncurkan httpd -M sebagai root
udo
Jadi tentukan path lengkap ke httpdexecutable.
Ignacio Vazquez-Abrams
9
@ IgnacioVazquez-Abrams: Di Ubuntu (dan distribusi berbasis Debian lainnya), namanya apache2dan tidak httpd, itulah sebabnya mengapa tidak ditemukan.
Daniel Andersson
3
Apache adalah httpd di redhat. Coba salah satu dari jawaban lain jika jawaban ini tidak cocok untuk Anda.
Jacks_Depresi
3
CentOS juga menggunakan httpd bukannya apache2
pedromanoel
37

Tidak ada jawaban di atas yang berfungsi jika Anda tidak dapat menjalankan perintah di server jauh. Jika Anda hanya memiliki hak "pengguna" atau tidak sama sekali mencoba membuat test.phpskrip:

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

Meskipun itu hanya akan berfungsi jika PHP diinstal sebagai mod_php.

yatsa
sumber
4
Anda juga ingin ini tidak terlihat oleh publik. Mungkin ingin membatasi hasil itu ke klien dengan IP administrator. Dan Anda akan ingin menghapus skrip itu segera setelah Anda selesai melakukannya. Karena pertahanannya dalam; jangan membuatnya lebih mudah dari yang seharusnya.
Parthian Shot
28

Mungkin ini akan membantu sebagian orang di host bersama tanpa akses ke httpd, apachectlatau proses:

Modul yang diaktifkan: ls /etc/apache2/mods-enabled/

Modul yang tersedia: ls /etc/apache2/mods-available/

CodeBrauer
sumber
Berikut adalah daftar lengkapnya, apache2ctl memfilternya
jgpATs2w
18

Anda juga dapat menggunakan apachectl

apachectl -t -D DUMP_MODULES
Eddie B
sumber
13

Saya pikir sebenarnya ada tiga pertanyaan di sini. Saya tidak yakin yang Anda tanyakan.

  • Modul apa yang Anda miliki di disk. Apa saja modul yang bisa Anda gunakan.

Ini akan (biasanya) di direktori modules dari distribusi apache Anda, biasanya / etc / httpd / modules /

  • Modul apa saja yang merupakan instance spesifik yang dikonfigurasi untuk dijalankan.

Ini dapat diperiksa dengan / usr / sbin / httpd -M, setidaknya untuk apache sistem dasar. Jika Anda ingin memeriksa file konfigurasi tertentu / usr / sbin / httpd -M -f / path / ke / config / file

  • Apa yang ada di apache berjalan

Untuk mendapatkan banyak info, Anda dapat melihatnya dengan http: // machinename / server-info / Ini tidak dikonfigurasi secara default, Anda harus mengonfigurasinya . Ini sedikit info yang bocor, jadi konfigurasikan jadi hanya orang lokal yang bisa melihatnya.

Jika Anda berada di mesin dan Anda memiliki akses untuk menjadi pengguna yang berjalan, Anda juga dapat melihat apa yang dimuat dengan memeriksa prosesnya. Anda dapat menemukan proses induk dengan:

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

Lalu, periksa

cat /proc/PID_FROM_ABOVE/maps
Homolka yang kaya
sumber
1
Info berguna tetapi karena OP menggunakan Ubuntu, nama dan lokasi file berbeda - misalnya: / usr / sbin / apache2 bukan httpd, dan ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' Lokasi modul ditangani secara berbeda, dengan subfolder yang tersedia mod dan tersedia mods
Linker3000
Terima kasih @ Linker3000 ... Anda benar, ini untuk RedHat / Centos, saya akan membiarkan komentar Anda tentang cara mengonversi ke Ubuntu
Rich Homolka
11

Jika Anda menggunakan Redhat / CentOS, httpddigunakan sebagai pengganti apache2ctl.

Ini berarti Anda harus menggunakan

httpd -M

Namun, httpdhampir tidak pernah di jalur yang Anda harapkan.

Saya dapat mengkonfirmasi pada CentOS 5.8 jalur sebenarnya /usr/sbin/httpd.

/usr/sbin/httpd -M

Tetapi jika itu bukan jalan, Anda dapat menemukannya. Inilah cara saya bisa melakukannya.

Pertama, saya memeriksa daemon yang digunakan untuk mengendalikannya.

less /init.d/httpd

Sekitar garis 40ish

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

Yang memberitahuku di mana tepatnya menemukannya. Semoga ini membantu.

Geedew
sumber
5

Daftar semua modul yang diaktifkan

a2query -m
MetalGodwin
sumber
3

Di gentoo saya, saya bisa menjalankan apache2ctl modulesdan melihat modul yang tercantum.

Grzegorz Golec
sumber
2

Memeriksa dari dalam skrip php (untuk mod_xsendfile):

if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
  && in_array('mod_xsendfile', apache_get_modules()))
  \\doSomething();

Pemeriksaan untuk PHP_SAPI adalah untuk mengecualikan ketika php dijalankan sebagai CGI, karena apache_get_modules () tidak berfungsi dalam konteks itu. Selain itu, jika ini dijalankan pada php <5.0.0, hanya apache2handlerkonteksnya yang akan menghasilkan hasil yang diharapkan.

noobish
sumber
1

Saya membuat skrip python kecil untuk membantu Anda. Silakan lihat di https://github.com/zioalex/unused_apache_modules

Inilah yang dapat Anda harapkan darinya:

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
sumber