1 安装
通过yum或apt-get的方式不在此说明,下面说明源代码安装的问题。
Linux下源码安装比较常规,最一般的即./configure;make;make install. 但由于不同版本对系统依赖的包不同,在安装过程中如果遇到依赖的情况需要安装相应的依赖。
1.1 安装路径
安装apache的httpd需要注意的问题是安装路径问题,由于Linux系统分支众多,安装过程中会将文件安装到不同的路径下。为此apache在安装时可以配置这些路径参数,具体通过configure的参数实现。
--prefix 指定安装的根目录,默认为/usr/local/apache2,用户可以自己指定,make install时会将bin lib等安装到此目录下,更详细的还可以设定如下几个比较重要的参数。
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--libdir=DIR object code libraries [EPREFIX/lib]
为了简化配置过程,源码包提供了config.layout,用户可以在修改其中定义的模板,并在configure时通过--enable-layout='name'来定义自己的目录路径方式。
config.layout中定义了众多的模板,基本上针对每种类型的系统都有定义,如Debian、MAC OS、AIX、等等等,下面可以看一个apache自己默认的定义
<Layout RedHat> prefix: /usr exec_prefix: ${prefix} bindir: ${prefix}/bin sbindir: ${prefix}/sbin libdir: ${prefix}/lib libexecdir: ${prefix}/lib/apache mandir: ${prefix}/man sysconfdir: /etc/httpd/conf datadir: /var/www installbuilddir: ${datadir}/build errordir: ${datadir}/error iconsdir: ${datadir}/icons htdocsdir: ${datadir}/html manualdir: ${datadir}/manual cgidir: ${datadir}/cgi-bin includedir: ${prefix}/include/apache localstatedir: /var runtimedir: ${localstatedir}/run logfiledir: ${localstatedir}/log/httpd proxycachedir: ${localstatedir}/cache/httpd </Layout>当我们在redhat/centos/fedora系统下yum安装httpd,实际按layout中定义的redhat的布局进行存放。
1.2 安装时特性配置
apache本身是模块化的,在配置时我们可以选择apache支持的模块以及对模块的支持方式,如so或是静态方式。
--enable-modules=mod-list 可以用all或most代替,表示静态编译的模块
--enable-mods-shared=mod-list 同上 ,表示编译为动态加载的共享模块
具体参考第3节
通常模块功能较大,模块具有比较多的特性,特性也可以通过配置来打开和关闭,具体可以通过configure --help 查看,如
--enable-charset-lite 支持字符转换
--enable-deflate 支持压缩
--enable-ldap 支持ldap
--enable-usertrack 支持用户会话跟踪
这里要重点说下MPM功能支持,此模块用于控制进程使用模型,在配置时可以指定将哪种进程模型编译为静态模块,不同的系统下有不同的默认MPM
--with-mpm = {beos|event|worker|prefork|mpmt_os2|winnt} Unix下支持prefork/worker/event Winnt下支持winnt
在2.4版本中mpm支持以动态方式编译,可以通过 --enable-mpms-shared方式说明,然后在LoadModule中加载不同的MPM模块,
具体可参考官方文档:http://httpd.apache.org/docs/2.4/mpm.html
1.3 编译和安装
在确认配置参数后,如前所述执行configure会生成Makefile
然后即可执行make和make install
这样到layout指定的目录下即可看到安装好的文件。
2 httpd的运行控制和状态监控
2.1 httpd的进程控制
一种方式是直接操作httpd进程,可以直接运行命令加上合适的参数。终止用pkill或kill
一种方式是采用apachectl这个脚本,这个脚本实际只是对httpd进行了简单的包装,设置一些系统环境,最主要是设置文件描述符打开个数,并通过系统命令获得进程状态
启动httpd后,打开浏览器即可访问。如果遇到提示文件访问权限问题,则问题可能是三方面的:1 SELinux策略 2 Directory目录权限配置错误 3 ServerRoot及上级目录权限错误
2.2 httpd参数说明
-k start|restart|graceful|graceful-stop|stop 控制httpd进程的启动和终止
-d dir 指定ServerRoot路径
-f file 指定启动时使用httpd.conf文件路径,通过指定不同的配置文件及端口,可以启动多个apache进程
-l 列出编译到apache中的模块
-L 列出当前配置指示
-M 列出当前加载的模块
-D 通过命令行设定宏,可以传递给配置文件中的<ifDefine name>... </ifDefine>,从而实现配置的选择性加载
-t 检查配置文件,但不启动
-C/-c 向httpd传递配置指令,从而对静态配置进行修改
2.3 apache运行状态监控
2.3.1 内置模块支持
mod_status 与 mod_info分别提供了运行状态和配置信息的监控,如需启用,需要在配置文件件打开相应的配置
# # Allow server status reports generated by mod_status, # with the URL of http://servername/server-status # Change the ".example.com" to match your domain to enable. # <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com </Location> # # Allow remote server configuration reports, with the URL of # http://servername/server-info (requires that mod_info.c be loaded). # Change the ".example.com" to match your domain to enable. # <Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from .example.com </Location>
对以上配置进行修改,通过浏览器打开http://usr/server-status即可
2.3.2 三方工具的监控
开源工具比较多,如zabbix和nagios,不在此说明
3 apache的模块管理和支持
3.1 模块的类型
apache模块分为三类:核心模块,标准模块和第三方模块。
核心模块:如core,mpm等,其为apache的基本 必须模块,无法删除。
标准模块:由apache自身维护,并作为apache的一部分发布,可以加载和删除,前提是需要静态安装了mod_so模块
三方模块:由第三方开发,与apache不在一起发布
3.2 模块的加载
模块可以通过静态的方式编译到httpd中,从而提高执行速度,通过在配置时指定./configure --enable-modules=most
模块也可以动态的方式加载,从而减小httpd的大小,通过在配置时指定./configure --enable-mods-shared=most,这样我们可以在httpd.conf中来加载需要的模块。
LoadModule可以加载ServerRoot/modules/下的模块,格式为LoadModule xxx_module modules/mod_xxx.so
LoadFile用来加载任意位置的模块,格式为LoadFile /usr/lib/modules/libphp5.so
值得注意的是,对于加载的模块,按照后进先出的方式进行去处理URL
3.3 增加新模块
增加新的模块有不同的方式,比较简单的是下载相应的.so文件,然后存放到指定的位置再通过LoadModule来加载
如果需要通过源码编译,则需要通过apxs进行,例如PHP在编译时,可以指定--with-apxs2=path即可调用相关脚本将生成的.so文件生成到对应位置
三方模块比较难以静态方式编译,如果模块支持以静态方式编译到apache中,则可以查看其编译文档。
参考文献
MPM prefork工作原理:http://httpd.apache.org/docs/2.4/mod/prefork.html
MPM worker工作原理:http://httpd.apache.org/docs/2.4/mod/worker.html
MPM event工作原理:http://httpd.apache.org/docs/2.4/mod/event.html
Apache prefork与workers工作原理 http://blog.csdn.net/gulaizi/article/details/4005523