Apache-2.2

找出是否可以從網站使用中禁用 Apache 模組

  • March 28, 2015

我可以使用以下命令查看 apache 載入的核心和其他模組的列表:

$ apache2ctl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
auth_basic_module (shared)
auth_digest_module (shared)

為了優化伺服器的性能(Apache本質上節省每個執行緒的記憶體),我想禁用未使用的模組。文件在下一頁Apache提供了有關此模組的資訊。

大多數時候,為每個模組提供的資訊足以決定我是否應該禁用一個模組。例如,我知道我不使用LDAP身份驗證,所以我可以安全地禁用authnz_ldap_module.

然而,對於某些模組來說,它有點不那麼明顯。例如,對於無法解決mime_magic的情況,該模組被用作“第二道防線” ,這在理論上無法確定,因為它取決於 Apache 將提供哪些文件。mod_mime

Apache問:有沒有辦法將有效用於處理請求的模組列表記錄到文件中?

如果我可以記錄這些資訊,我會讓 Web 伺服器執行一段時間,然後獲取用於處理同時收到的所有請求的模組列表,並禁用那些未出現在該列表中的模組。

我不相信有一個通用的解決方案,但仍然有一些選擇。一些模組(例如,mod_rewrite)有自己的日誌記錄工具,但您必須閱讀每個模組的文件才能找到。列出的任何模組static都已編譯,除非您重新編譯 Apache,否則無法禁用。剩下的,您可以嘗試三件事:搜尋指令前綴、啟用調試日誌記錄或有選擇地逐個模組禁用並重新啟動。

對於大多數模組,指令共享一個公共前綴。對於 HTTP 身份驗證模組basicdigest,您可以通過使用 過濾配置文件來判斷您是否正在使用它們grep。如果您正在做虛擬主機,您可能可以執行以下操作:

cd /etc/apache2/sites-enabled
grep Auth *

如果您看到類似AuthType basicor的內容AuthType digest,那麼您需要這些模組中的一個或兩個。否則,禁用它們應該是安全的。其他模組也類似:僅當指令在某處發出mime_magic時才啟用。MimeMagicFile

如果在此之後仍有不確定的模組,您可以嘗試啟用LogLevel debug並檢查日誌。如果您看到某個模組的一些輸出,那麼您可以判斷該模組正在使用中。您甚至可以為特定模組設置 LogLevel 調試。不過,這與您詢問的內容略有不同,因為如果您沒有看到任何輸出,並不一定意味著模組未在使用中。(也許它根本不會產生調試輸出。)

最後,在許多情況下,您可以嘗試禁用模組並執行 apache2ctl configtest. 如果由於未載入模組而無法辨識指令,則會導致錯誤。

引用自:https://serverfault.com/questions/373776