以下是一个编译配置:
./configure --prefix=/usr/local/apache --sysconfdir=/etc/apache --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-z --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-mpm=event但这个配置中有些项是多余的,以下是等价编译配置:
./configure --prefix=/usr/local/apache --sysconfdir=/etc/apache --enable-mpms-shared=all --with-z --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-mpm=event具体哪些项多余,看完下面的1.3-1.6就知道了。
1.3 模块动静态编译httpd是高度模块化的程序,各个功能通过加载各个模块来实现。但前提是将功能对应的模块先编译好,以供httpd加载。
httpd对模块有两种编译方式:静态编译和动态编译。
静态编译:将模块直接编译进httpd的核心中。静态编译的所有模块都会随着httpd的启动和启动。
动态编译:将模块编译好,但不编译到httpd的核心中。要启动动态编译的模块,需要在httpd的配置文件中使用LoadModule指令加载。
httpd的一个优点是可以实现动态模块的热插拔。因为httpd是独立于终端的守护进程,可以通过发送HUP信号给httpd让其重读配置文件。而是否加载动态编译模块正是由httpd配置文件中的LoadModule指令决定的。当想要加载某个模块A时(即模块热插),使用LoadModule指定A模块的链接地址,再发送HUP信号重读配置文件即可。而想要停止某个模块A时(即模块热拔),只需将对应模块的LoadModule指令行给注释,再重读配置文件即可。
甚至,可以随时动态编译某个外部模块到httpd中,然后再热插。因为何时编译需要动态加载的模块对httpd来说是无关紧要的,它只需LoadModule和重读配置文件两个过程对模块进行控制。
在编译选项中,有几种类型的选项:
--disable-FEATURE:禁用某特性,等价于--enable-FEATURE=no --enable-FEATURE[=ARG]:启用某特性,默认参数值为YES --enable-Module_Name=shared:指定的模块Module_Name以动态编译方式安装 --enable-Module_Name=static:指定的模块Module_Name以静态编译方式安装对于./configure --help中给定的选项,如果该选项是--disable的,那么表示该选项默认是启用的,需要显式使用--disable选项禁用;如果该选项是--enable的,那么表示该选项默认是禁用的,需要使用--enable选项来启用。例如:
--disable-authz-user :表示authz-user特性默认启用,编译时无需指定该项。如果要禁用,编译时需显式指定--disable-authz-user --enable-echo :表示echo特性默认是禁用的,如果要启用,则编译时需显式指定--enable-echo