我在 Ubuntu 14.04 上運行 apache v2.4 並具有這種格式的容器/指令
<IfModule mpm_prefork_module>
# ...
</IfModule>
然而,我經常看到 apache 官方文件和 stackexchange 網站中引用的模組是這樣的:
<IfModule prefork.c>
# ...
</IfModule>
我搜尋了很多,包括這裡-http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule我無法找到其中的區別以及何時應該使用其中一個而不是另一個?
以重寫模組為例
來自阿帕契文件:ifmodule 指令
模組參數可以是編譯時的模組標識符或模組的檔名。
例如,rewrite_module 是標識符,mod_rewrite.c 是檔名。
.htaccess
在文件中很常見
<IfModule mod_rewrite.c>
# ....
</IfModule>
我grep
已經編輯了我的/etc/apache2
目錄,並且“mod_rewrite.c”沒有在任何地方定義。
在我的機器上,該文件/etc/apache2/mods-available/rewrite.load
包含:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
那麼是mod_rewrite.c
對 Windows/其他檔案的引用嗎?在什麼情況下在 Linux 機器上引用它會是不正確的語法?
答案1
在頁面中你連結的到,它包含以下文字:
模組參數可以是編譯時的模組標識符或模組的檔名。例如,rewrite_module 是標識符,mod_rewrite.c 是檔名。如果模組由多個原始檔案組成,請使用包含字串 STANDARD20_MODULE_STUFF 的檔案名稱。
使用提供的範例,重寫模組可以稱為“rewrite_module”(標識符)或 mod_rewrite.c(檔案名稱)。兩者是等價的,沒有差別。您可以使用其中任何一個。
帶有原始檔 mod_rewrite.c 的模組被編譯為 mod_rewrite.so,這就是您的檔案系統上的內容。該原始檔案具有行“module AP_MODULE_DECLARE_DATA rewrite_module;”其中宣告了一個名為「rewrite_module」的模組。
此模組可以稱為“rewrite_module”(即標識符)或“mod_rewrite.c”(即編譯該模組的原始檔)。
「LoadModule」行告訴它從已編譯的物件 mod_rewrite.so 載入具有標識符「rewrite_module」的模組。配置此選項時,您可以引用標識符或來源檔案名稱(如果您知道)。
答案2
正如 @DanielLawson 已經指出的那樣,這在您連結到的 Apache 手冊頁面中有清楚的描述。
模組參數可以是編譯時的模組標識符或模組的檔名。
模組的檔名以。副檔名,因為 C 是 Apache httpd 開發所使用的語言。
模組標識符的概念又類似 Stack Exchange 的標籤。您的<IfModule mpm_prefork_module>
區塊顯示:如果您有任何模組標記為mpm_prefork_模組。這使得配置具有更好的靈活性 - 不同的模組提供相同的功能,例如mod_ssl.c和mod_gnutls.c都有ssl_模組標識符。