我对 apache 中外部模块的静态和动态编译的区别感到困惑。有人能就 mod_qos 解释一下吗?
另外,在 httpd.conf 文件中加载模块的以下方式有什么区别?
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule reqtimeout_module>
DirectoryIndex index.php index.html
</IfModule>
如您所见,前者在指令中引用了 .c 文件,而后者没有?这是为什么?它如何改变模块的包含?
谢谢。我是 Apache 的新手,所以如果问题听起来很傻,请不要介意。
答案1
httpd
静态模块在服务器构建时被编译到二进制文件中,而动态模块则在运行时被包含进去。阿帕奇,几乎所有分布式模块都是动态添加的。这很重要,因为如果模块更新,则必须重新编译二进制文件httpd
以应用更新(如果您进行的是静态编译)。
命名约定只是选择<IfModule>
在指令中引用模块的方法,与模块的编译方式无关。
如文档中所述,该模块可以通过以下方式引用:module-file
或者 module-identifier
。
例如,
rewrite_module
是标识符,mod_rewrite.c
是文件名。
注意(尝试扩展您重复问题的答案):要动态加载foo_module
模块你的服务器,将mod_foo.so
文件放在与所有其他模块相同的目录中,并LoadModule
在主 Apache 文件中添加与所有其他模块相同格式的指令.conf
(它将正确引用正确的路径)。