題 如何檢查啟用/安裝了哪些apache模塊?


哪種方法可以檢查哪些apache模塊已啟用?


347
2018-05-17 19:55


起源




答案:


你在Ubuntu上試試:

apache2ctl -M

423
2018-05-17 20:01



apache2ctl -M 效果很好 - udo
apache2 -M 導致此錯誤 apache2: bad user name ${APACHE_RUN_USER} - udo
足夠公平 - 這是因為你沒有像apache配置中定義的apache運行時用戶(可能是www-data)那樣運行命令。有一種方法可以解決這個問題,但你也可以堅持使用apache2ctl。 - Linker3000
sudo apache2ctl -M | sort - mmdemirbas
請注意,有許多有用的選項(標誌) apache2ctl 但它們既沒有在聯機幫助頁中列出,也沒有列在 apache2ctl --help。那是因為他們被交給了 httpd。它們列在 httpd文檔 只要。 - Lutz Prechelt


httpd -M 會告訴你哪些模塊是內置的或共享的。


108
2018-05-17 19:56



嗯......當以root身份啟動httpd -M時,我得到了一個“bash:httpd:command not found” - udo
那麼請指定完整路徑 httpd 可執行文件。 - Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams:在Ubuntu(和其他基於Debian的發行版)上,名字是 apache2 並不是 httpd,這就是為什麼沒有找到它。 - Daniel Andersson
Apache是​​redhat上的httpd。如果這個答案不適合您,請嘗試其他答案之一。 - Jacks_Depression
CentOS也使用httpd而不是apache2 - pedromanoel


如果您無法在遠程服務器上運行命令,則上述答案中的任何內容均無效。如果您只有“用戶”權限或根本沒有權限,請嘗試創建 test.php 腳本:

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

雖然它只在PHP安裝時才有效 mod_php


35
2018-04-11 09:10



此外,您還希望不要將其公開顯示。可能希望使用管理員的IP將結果限制為客戶端。並且您將在完成後立即刪除該腳本。因為防守深度;不要讓它比它需要的容易。 - Parthian Shot


也許這對於無法訪問的共享主機上的某些人有所幫助 httpdapachectl 或過程:

啟用模塊: ls /etc/apache2/mods-enabled/

可用模塊: ls /etc/apache2/mods-available/


20
2018-05-04 11:33



這是完整的列表,apache2ctl過濾它們 - jgpATs2w


你也可以使用 的apachectl

apachectl -t -D DUMP_MODULES

17
2018-02-06 07:04





我認為這裡實際上有三個問題。我不確定你在問什麼。

  • 你在磁盤上有什麼模塊。您可以使用的所有模塊是什麼。

這將(通常)在您的apache發行版的modules目錄中,通常是/ etc / httpd / modules /

  • 配置為運行的任何特定實例的模塊是什麼。

這可以用/ usr / sbin / httpd -M檢查,至少對於基本系統apache。如果要檢查特定的配置文件/ usr / sbin / httpd -M -f / path / to / config / file

  • 正在運行的apache中有什麼

要獲得大量信息,您可以看到它 HTTP://機器/服務器信息/ 默認情況下不配置,您必須這樣做 配置 它有點信息洩漏,所以配置它只有當地人才能看到它。

如果您在計算機上並且可以訪問正在運行的用戶,則還可以通過檢查進程來查看加載的內容。您可以使用以下命令查找父進程:

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

然後退房

cat /proc/PID_FROM_ABOVE/maps

11
2018-05-17 20:57



有用的信息,但因為OP使用Ubuntu,文件名和位置是不同的 - 例如:/ usr / sbin / apache2而不是httpd,和ps -ef | gawk'/ apache2 / && $ 3 == 1 {print $ 2}'模塊的位置處理方式不同,使用mods-available和mods-enabled子文件夾 - Linker3000
謝謝@ Linker3000 ......你是對的,這是RedHat / Centos,我會讓你評論如何轉換為Ubuntu - Rich Homolka


如果您使用的是Redhat / CentOS, httpd 用來代替 apache2ctl

這意味著你需要使用

httpd -M

然而, httpd 幾乎從不在你期望的道路上。

我可以在CentOS 5.8上確認實際的路徑 /usr/sbin/httpd

/usr/sbin/httpd -M

但如果這不是路徑,你可以發現它。這是我能夠做到的。

首先,我檢查了用於控制它的守護進程。

less /init.d/httpd

繞線40ish

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

哪個告訴我到底在哪裡找到它。希望這可以幫助。


10
2018-03-11 18:41





列出所有已啟用的模塊

a2query -m

5
2017-08-30 12:23





在我的gentoo上,我可以執行 apache2ctl modules 並查看列出的模塊。


3
2018-05-21 22:35





從php腳本中檢查(對於mod_xsendfile):

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

當php作為CGI運行時,PHP_SAPI的檢查是排除的 apache_get_modules() 在這種情況下不起作用。另外,如果這是在php <5.0.0上運行,那麼只有 apache2handler 上下文將產生預期的結果。


2
2018-04-11 17:36