您的位置:首页 > 运维架构 > Apache

apache web服务器的安装和运行

2012-12-08 15:43 477 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐