前两篇博文简单的描述了web服务的基本原理,已并且编译安装了httpd2.4。今天以httpd的配置文件为蓝本,详细讲解下httpd的配置。由于2.2与2.4版本配置文件并不完全一致,这里兼顾了2.2与2.4的配置文件的主要内容。

   本文主要内容框架

   httpd文件概览

   配置文件的格式

   主要设置

一、httpd文件概览

   httpd编译安装完成后生成了一些重要的文件。主要是配置文件和应用程序文件。在上一篇中,我们将程序安装在/usr/local/apache目录下,配置文件存放在/etc/httpd24目录下。

Linux入门之web服务(三)---httpd配置应用详解_httpd配置文件简析

这里列出我们可能会使用到的主要文件、目录。更多详细信息可参考apache官方文档

二、配置文件的格式

   配置文件中大致分为全局配置、主机配置、虚拟主机配置。全局配置对整个配置文件都有下效,主机配置仅用于配置一个站点,虚拟主机配置用于提供多个站点时候使用。要注意:主机配置和虚拟主机配置不可能存在生效。

   配置内容的主要格式是:

   配置参数     值  

   eg:Listen 80

   其中:配置参数指令不区分大小写,但约定俗成,首字母大写了;值大小写敏感;有的参数可能会出现多次。

Linux入门之web服务(三)---httpd配置应用详解_httpd配置文件简析_02

这里简单给出了配置文件的轮廓。需要说明的是,2.2与2.4的配置文件还是有一定的区别。尤其是虚拟主机的配置,2.4将其配置文件放到了ext    ra目录下。具体描述到各个功能的时候再详细介绍其不同

三、主要设置

   配置文件是httpd的重要控制文件,几乎所有的功能模块都需要在配置文件中设置。下面,将经常使用到的配置进行分析。

   在具体解析配置文件之前,先确认下httpd的工作机制。httpd是一个高度模块化的程序,它由core+module组成,可以通过DSO模块来增加或者取消相应的功能。为了适应这个机制,将功能化,实现“热插拔”的功能,aapache提供了MPM机制。这里我们介绍下MPM:多处理模块。在httpd下有三种,prefork、worker、event。

   

prefork多进程运行,一个进程响应一个请求。简单高效,稳定,连接数大时消耗内存过大预先建立进程
worker多线程运行,一个进程多个线程相应请求。每个进程线程数固定处理请求量大,不稳定,一个线程崩溃,整个进程就崩溃预先建立进程
event基于事件驱动。主进程生成多个子线程,子线程相应多个请求处理大量数据对https支持不好

prefork:多进程运行,在web服务器中,root用户生成一个主进程,主进程管理控制生成多个子进程,每个进程处理一个请求。在用户请求到达之前,主进程预生成多个子进程,作为备用和空闲进程,以应对即将到来的请求。但是,在请求数量急剧增大情况下,对系统内存资源的消耗十分严重。

<IfModule mpm_prefork_module>
    StartServers             5   //默认启动进程数
    MinSpareServers          5   //最小空闲进程数
    MaxSpareServers         10   //最大空闲进程数
    MaxRequestWorkers      250   //最大启动进程数
    MaxConnectionsPerChild   0  
</IfModule>

worker:多进程运行,每个进程又生成多个线程,每个进程的线程数是固定的,每个线程相应一个请求。同prefork类似,它也事先生成空闲进程备用。主进程会根据访问情况动态增加或者减少进程数量,每个子进程可建立多个服务线程和一个监听线程,监听线程接收请求,并将相关信息传入服务线程。同prefork相比,它能相应更多的请求,消耗更少的系统资源,但是由于采用线程响应,如果一个线程出现崩溃,整个进程就会崩溃,造成不稳定;

<IfModule mpm_worker_module>
    StartServers             3    //默认启动进程数
    MinSpareThreads         75    //最小空闲线程数
    MaxSpareThreads        250    //最大空闲线程数
    ThreadsPerChild         25    //每子进程生成线程数
    MaxRequestWorkers      400    //最大的工作线程数
    MaxConnectionsPerChild   0    //线程生命周期结束前最大服务的请求数,0为不限制
</IfModule>

event:基于事件的模型。由主进程生成多个进程,子进程生成多个线程,每个线程响应多个请求。这点worker模式一样。但是,event模式下,负责连接的工作统一由主进程实现,线程只负责里事务,处理完成后立即释放。

在编译安装时可以指定默认使用的是哪种模式,

# ./configure --prefix=/usr/local/apache  --enable-so --with-mpm=worker


在编译完成如果需要切换,在2.4的版本中,可以通过取消、加载模块的方式实现。

这里我们以httpd2.4为蓝本介绍主要配置信息。

1、Listen 80

  控***务器注册到内核的监听端口,可以修改成其他端口,但是一般情况下,使用默认80端口。

2、LoadModule authn_file_module modules/mod_authn_file.so

   #LoadModule authn_dbm_module modules/mod_authn_dbm.so

加载模块,这里只列举了两个,在配置文件中,可以使用到的模块都可以通过上述形式加载进来。

3、DocumentRoot

   Linux入门之web服务(三)---httpd配置应用详解_httpd配置文件简析_03

这里Option定义了页面访问的属性。主要的值有

Indexes缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;危险,不建议使用
FollowSymLinks允许跟随符号链接所指向的原始文件,与首部文件中的reference类似
None所有都不启用
All所有都启用
ExecCGI允许使用mod_cgi模块执行CGI脚本
Includes允许使用mod_include模块实现服务器端包含(SSI)
MultiViews允许使用mod_negotiation实现内容协商
SymLinksIfOwnerMatch在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件


AllowOverride 指明它下面定义的控制是否生效,一般情况下值有none(不禁用)和authconfig、all

在2.4中,授权统一使用requrie.

   允许所有主机访问:Require all granted

   拒绝所有主机访问:Require all deny

   允许某个IP地址访问 Require IP-address等

4、虚拟主机

   虚拟主机是一个重要的概念,在2.4中,虚拟主机的配置文件在extra目录中。要实现虚拟机主机。需要现在主配置文件中先做设置,同时禁用主机,主机和虚拟主机是不能同时存在的。

   4.1 在主配置文件中找到DocumentRoot,注释掉该行,取消主机配置

       

注释掉该行
#DocumentRoot "/usr/local/apache/htdocs"

   4.2 找到Virtual hosts取消注释,将扩展配置文件包含到主配置文件中

   

# Virtual hosts
#取消注释,包含扩展配置文件
Include /etc/httpd24/extra/httpd-vhosts.conf

   4.3 在扩展配置文件中,设置虚拟机主机

       编辑扩展配置文件

       

# vim httpd-vhosts.conf

     设置相关信息

     

#设定虚拟主机监听的端口,这里要与主配置文件中监听的端口一致,或者自行添加新的监听端口
<VirtualHost *:80>
        ServerName www.a.com   //虚拟主机名称
        DocumentRoot "/usr/local/apache/htdocs/test"   //虚拟主机文件所在目录
        <Directory "/usr/local/apache/htdocs/test">   //定义页面访问属性,访问控制。2.4中,必须为页面设置访问控制,否知会出现拒绝访问的错误
                Options None
                Require all granted
        </Directory>
        ErrorLog "logs/a.error_log"    //定义错误日志
</VirtualHost>

   4.4 保存设置,重新加载配置文件,测试配置页面

       这里我仅仅设置了一个虚拟站点,可以根据需求设置多个不同的站点。设置完成之后必须重新加载配置文件,才能头生效。

   先检查是否有语法错误

   

# httpd -t

   重新加载配置文件

   

# servcie httpd24 reload

访问页面即可

5、服务器状态页

   在2.4中,服务器状态页的配置也在extra目录中,编辑httpd-info.conf 配置文件,

显示服务器状态信息
<Location /server-status>
    SetHandler server-status
    Require host .example.com
    Require ip 127
</Location>

要能够使配置生效,必须在主配置文件中加载该扩展配置文件

   

# Real-time info on requests and configuration
#取消该行注释
Include /etc/httpd24/extra/httpd-info.conf

在浏览器中查看相关信息即可http://IP地址/server-status

6、定义默认主页

   

<IfModule dir_module>
    DirectoryIndex  index.html   //主页
</IfModule>

以后我们如果部署php的网站,那就就需要在这里添加index.php。

7.路径别名

   有时候我们在浏览器中输入的地址并不是我们在文件系统中的路径。这个是靠路径别名的功能来实现的。

   首先要装载相关模块

   

LoadModule alias_module modules/mod_alias.so

   然后在模块定义中添加配置

   

Alias /test /usr/local/a

在浏览器中输入http://IP地址/test显示的就是a目录下的内容,而不再是主机目录或者虚拟主机目录下的内容

8、基于用户的访问控制

   基于用户的访问控制主要有两种,一直是表单控制,一种是基于http协议的认证。基于http协议的认证一般不在正式的上线网站中使用,使用较多的是在对管理页面的单独控制。比如对某监控页面,要求只有特定用户才能访问。

   8.1  编辑配置文件,为需要认证的目录配置认证机制

       

DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride AuthConfig
    AuthType Basic
    AuthName "test"
    AuthUserFile /etc/httpd24/.htpasswd    //验证文件
    Require valid-user
</Directory>

   8.2 生成验证文件

   

[root@simon apache]# htpasswd -c /etc/httpd24/.htpasswd test
New password:
Re-type new password:
Adding password for user test
[root@simon apache]#

   8.3 重新加载配置文件,验证是否成功

   Linux入门之web服务(三)---httpd配置应用详解_httpd配置文件简析_04

9、小结

   httpd2.4的配置文件内容众多,并且将2.2主配置文件中的许多配置扩展成了补充配置文件放置在extra目录下,启用的时候需要取消对默写功能包含的注释。

   由于内容过多,有的特性没有写进去。稍后会陆续再更新。



Version 1.0 2014-3-23