APache中模块静态编译和动态编译过程的区别

APache中模块静态编译和动态编译过程的区别

我对 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(它将正确引用正确的路径)。

相关内容