Apache的主配置文件路径:/etc/httpd/conf/httpd.conf

下面基于Red Hat Enterprise Linux Server release 5.8版本中安装的apache2.2来讲解一下.
 
一、默认选项:
ServerRoot "/etc/httpd"  #安装apache 软件的根目录的位置,很多文件的相对路径,(不要随意改动)。
PidFile run/httpd.pid    #每个进程都有一个pid号,这是第一个httpd进程的进程号文件存放位置
Timeout 120              #用户通过三次握手建立连接后为发送和接收所限定的超时时间
KeepAlive Off|On         #长连接,即当客户端连接到服务器,接收完数据后仍然保持连接状态
MaxKeepAliveRequests 100   #一个连接服务的最多请求次数。
KeepAliveTimeout 15        #持续连接多长时间,该连接没有再请求数据,则断开该连接。
 
二、 MPM(Multi path module:多道处理模型
有以下几种:
mpm_winnt :Windows 专用
prefork   :事先生成进程(一个请求用一个进程响应)稳定性好,大并发下消耗资源较多
worker    :基于线程(一个请求用一个线程响应,启动多个进程,每个进程生成多个线程,每个请求用一个线程响应)
event     :事件(一个进程处理多个请求)
(在apache2.2中不支持event模型的,在红帽httpd2.2中默认使用的是prefork的模型,比较稳定,我们这里针对红帽版本进行讲解)
 
用httpd -l命令可以查看当前服务器支持哪种核心模型
 
  1. [root@www ~]# httpd -l 
  2. Compiled in modules: 
  3.   core.c 
  4.   prefork.c 
  5.   http_core.c 
  6.   mod_so.c 
如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。
#HTTPD=/usr/sbin/httpd.worker如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。
#HTTPD=/usr/sbin/httpd.worker
 
这里定义了prefork和worker各自不同模型配置的属性
 
  1. prefork: 
  2. <IfModule prefork.c>    #如果启用prefork模块 
  3. StartServers       8    #服务器开启时启动多少个进程  
  4. MinSpareServers    5    #最少空闲进程数 
  5. MaxSpareServers   20    #最大空闲进程数 
  6. ServerLimit      256    #服务器限制请求数(为MaxClient指定最大上限) 
  7. MaxClients       256    #最多允许多少个请求同时连进来 
  8. MaxRequestsPerChild  4000   #一个进程最多响应多少次的请求 
  9. </IfModule> 
  10. 这些值都可以根据实际情况进行调整的 
 
  1. <IfModule worker.c>     #如果启用worker模型 
  2. StartServers         2  #开启时启动的进程数 
  3. MaxClients         150  #最多客户端请求数 
  4. MinSpareThreads     25  #最少空闲的线程数 
  5. MaxSpareThreads     75  #最多空闲的线程数 
  6. ThreadsPerChild     25  #每个进程生成多少个线程数 
  7. MaxRequestsPerChild  0  #每个进程响应多少个请求,(这个是由线程决定的,0表示不作限定) 
  8. </IfModule> 
 
三、可以变更的选项、
Listen 80 #服务器监听的端口号(也可以指定地址)
 
#指定apache在启动的时候装载的模块
模块 模块名称 模块路径(如果不想要的话,注释掉即可)
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
……………………………………………………………………
……………………………………………………………………
 
 
Include conf.d/*.conf #这是主配置文件的从配置文件,隶属于主配置文件的一部分
User apache #apache 的worker模型默认是普通用户登录的(这里指定了普通用户)
Group apache    #指定默认组
 
ServerAdmin root@localhost #管理员的邮件地址
#ServerName www.example.com:80 
#服务器名称,不启用的话开启服务器时它回去反向解析当前的ip地址到某个主机名,解析成功就把那个主机名当做服务器名字,所以最好给本地主机一个主机名。
(虚拟主机上这个是必须的)
DocumentRoot "/var/www/html" #网页文档所在的路径(可以更改)
 
四、网页访问控制的设置选项:
<Directory /> #可以解释为容器,在这里可以定义网页的访问属性
    Options FollowSymLinks
    AllowOverride None
</Directory>
在这个配置中,主要有下面几个选项:
 
Options:用来定义区块的内容
主要选项:
ExecCGI: 在该目录下允许执行CGI脚本。
FollowSymLinks: 在该目录下允许文件系统使用符号连接。
Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
Muliyiview:多视图,可以根据你的客户端的语言来源提供相匹配的网页给你。
Includes:允许执行服务器端包含。
None:不支持任何选项
All:支持所有选项
 
AllowOverride 指的是允许覆盖,覆盖之后的内容,之后的内容是定义服务器的访问控制列表的,指允许谁能够访问和不能够访问。
 
Order: 用于定义访问顺序,后可以跟ip、网络地址或者主机
Allow: 允许客户端访问
Deny:拒绝客户端访问
AuthConfig:定义用户提供账号密码来进行访问该网页(下面会有例子的哦)
 
<Directory "/var/www/html"> #默认网页的路径,在这里定义该网页的访问控制机制
    Options Indexes FollowSymLinks #有索引,可以使用符号链接
    AllowOverride None #指不允许覆盖,以目录自己的权限为主。
    Order allow,deny   #定义允许和拒绝的次序
    Allow from all #允许所有客户端访问
</Directory>
 
五、日志记录及定义别名:
ErrorLog logs/error_log #定义错误日志
LogLevel warn #日志级别
 
访问日志的格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
 
%h: 客户端地址
%l:远端主机上的登陆名称
%u:登陆网站的时候用户的名称
%t:日志事件产生的时间
%r:请求报文的第一行
\:表示转义
%>s:最近一次请求的状态码
%b:响应报文的大小
%{Referer}i:当前页面来源于哪个页面
%{User-Agent}i:浏览器的来源
(具体可以参考下帮助文档哦)
 
#CustomLog logs/access_log common   #通用访问日志
CustomLog logs/access_log combined #混合访问日志
 
定义别名:
Alias /icons/ "/var/www/icons/" #即访问/icons 页面时会自动访问到/var/www/icons中的页面
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all  #这里定义了访问控制
</Directory>
 
六、定义虚拟主机:
 
#NameVirtualHost *:80     #指定虚拟主机名或地址和端口(和下面定义虚拟主机的名称或地址保持一致)
eg:NameVirtualHost 172.16.62.1:80
 
虚拟主机的格式:
定义虚拟主机:
<VirtualHost [IP:PORT]>
DocumentRoot "/path"            #主页文件在哪
ServerName                 #服务器名称
<Directory "/path"> #在此定义文件访问控制
</Directory>
ErrorLog  logs/site1.err_log #定义日志路径
CustomLog logs/site1.access_log combined
</VirtualHost>
 
虚拟主机有三种
基于IP的虚拟主机:使用不同的ip提供不同的站点(主机由多个ip地址)
基于port的虚拟主机:使用不同的port提供不同的站点
基于主机名(域名)的虚拟主机:使用不同的主机名提供不同的站点
ServerName 不同,在主配置文件中要将NameVirtualHost 启用,和下面定义的虚拟主机的地址端口务必要保持一致。
 
下面以一个例子来讲解下基于ssl的用户认证和虚拟主机的配置。。
 
例如:建立httpd服务器,分别为www.magedu.com, www.test.net, www.example.org各提供一个虚拟主机,位置分别为:/vhosts/magedu, /vhosts/test, /vhosts/example;要求:
1)每个虚拟主机的要使用各自的错误日志和访问日志,日志文件名称以虚拟主机名称打头;三个虚拟主机的日志文件都位于/vhosts/logs目录中;
2)www.magedu.com虚拟主机仅允许来自172.16.0.0/16(除了172.16.100.0/24)的主机访问,且支持基于SSL的访问;
3)www.test.org虚拟主机仅允许提供了帐号和密码的请求者访问
 
解析过程:
 
定义虚拟主机,首先要把中心主机注释掉
#DocumentRoot "/var/www/html"
可以在主配置文件中末尾添加如下内容:(我的主机ip为172.16.62.1)
 
  1. <VirtualHost 172.16.62.1:80> 
  2.     ServerName www.magedu.com 
  3.     DocumentRoot "/vhosts/magedu" 
  4. </VirtualHost> 
  5. <VirtualHost 172.16.62.1:80> 
  6.     ServerName www.test.net 
  7.     DocumentRoot "/vhosts/test" 
  8. </VirtualHost> 
  9. <VirtualHost 172.16.62.1:80> 
  10.     ServerName www.example.org 
  11.     DocumentRoot "/vhosts/example" 
  12. </VirtualHost> 
在各相应目录下新建一个html文档,里面写下相应内容,
修改/etc/hosts文件添加如下三行:
 
  1. vim /etc/hosts 
  2. 172.16.62.1 www.magedu.com 
  3. 172.16.62.1 www.test.net 
  4. 172.16.62.1 www.example.org 
启动httpd服务(启动之前确保selinux是关闭状态)
然后通过不同主机就可以进行访问了。
三个虚拟主机配置完成。。
 
1),在各个虚拟机中定义日志:添加如下内容
 
  1. ErrorLog /vhosts/logs/magedu.error_log 
  2. CustomLog /vhosts/logs/magedu.access_log  common 
  3. 下面两个虚拟机日志文件将magedu替换成为test和example即可。 
2)、在magedu虚拟机中添加:
 
  1. <Directory "/vhosts/magedu"> 
  2.     Order deny,allow 
  3.     Deny from 172.16.100.0/24 
  4.     Allow from 172.16.0.0/16 
  5. </Directory> 
基于ssl访问,服务器端通过给客户端进行颁发私有证书来实现。
(私有证书的创建及颁发前面文章有详细介绍,这里只给出相关步骤)
 
颁发证书方:
 
  1. # vim /etc/pki/tls/openssl.cnf 
  2. dir=/etc/pki/CA 
  3. 在这里还可以修改一些默认选项 
  4.  
  5. # cd /etc/pki/CA 
  6. # make certs newcerts crl 
  7. # touch index.txt  
  8. # touch serial 
  9. # echo 01 > serial 
  10.  
  11. 生成自签署证书: 
  12. # (umask 077; openssl genrsa -out private/cakey.pem 2048) 
  13. # openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650 
申请方:
 
  1. # cd /etc/httpd/ 
  2. # mkdir ssl 
  3. # cd ssl 
  4. # (umask 077; openssl genrsa 1024 > httpd.key) 
  5. # openssl req -new -key httpd.key -out httpd.csr 
签署证书:
 
  1. # openssl ca -in httpd.csr -out httpd.crt -days N 
然后将证书导入访问的浏览器,即可通过https 进行访问了。。

apache的主配置文件httpd.conf解析以及相关例题_配置文件

找到该证书所在位置,导入该证书即可。

apache的主配置文件httpd.conf解析以及相关例题_配置文件_02

浏览时该内容就会被加上安全设置了。
 

apache的主配置文件httpd.conf解析以及相关例题_release_03

3),在虚拟机www.test.net中添加;
 
  1. <Directory "/vhosts/test"> 
  2.     AllowOverride Authconfig 
  3.     AuthType Basic 
  4.     AuthName "Limit..." 
  5.     AuthUserFile "/web/users"  #这个文件里定义了用户以及用户密码 
  6.     Require valid-user  #定义了文件/web/users的用户具有访问权限 
  7. </Directory> 
添加可以访问的用户:
这里引入一个命令:htpasswd
用到的选项:
-c:第一次创建的时候用到的,为了创建文件所用(文件存在后就不用了)
-m:指定文件以md5方式进行加密
 
  1. [root@www ~]# htpasswd -c -m /web/users tom 
  2. New password:  
  3. Re-type new password:  
  4. Adding password for user tom 
  5. [root@www ~]# htpasswd -m /web/users jerry 
  6. New password:  
  7. Re-type new password:  
  8. Adding password for user jerry 
这样就添加了用户及其密码到文件/web/users 中了。
 
再次访问www.test.net站点的时候就会出现如图所示的内容了。。

apache的主配置文件httpd.conf解析以及相关例题_release_04

输入你所设置的用户名和密码就可以进行访问了.......