Jawaban:
Anda berada di Ubuntu jadi cobalah:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
tetapi mereka tidak terdaftar di halaman manual atau di apache2ctl --help
. Itu karena mereka diserahkan kepada httpd
. Mereka terdaftar dalam dokumentasi httpd saja.
httpd -M
akan memberi tahu Anda modul mana yang built-in atau dibagikan.
httpd
executable.
apache2
dan tidak httpd
, itulah sebabnya mengapa tidak ditemukan.
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.php
skrip:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
Meskipun itu hanya akan berfungsi jika PHP diinstal sebagai mod_php
.
Mungkin ini akan membantu sebagian orang di host bersama tanpa akses ke httpd
, apachectl
atau proses:
Modul yang diaktifkan: ls /etc/apache2/mods-enabled/
Modul yang tersedia: ls /etc/apache2/mods-available/
Saya pikir sebenarnya ada tiga pertanyaan di sini. Saya tidak yakin yang Anda tanyakan.
Ini akan (biasanya) di direktori modules dari distribusi apache Anda, biasanya / etc / httpd / modules /
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
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
Jika Anda menggunakan Redhat / CentOS, httpd
digunakan sebagai pengganti apache2ctl
.
Ini berarti Anda harus menggunakan
httpd -M
Namun, httpd
hampir 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.
Daftar semua modul yang diaktifkan
a2query -m
Di gentoo saya, saya bisa menjalankan apache2ctl modules
dan melihat modul yang tercantum.
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 apache2handler
konteksnya yang akan menghasilkan hasil yang diharapkan.
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']