CentOS6.5默认安装2.2.15的版本,以该版本为例,说明配置文件的组成。
安装生成的文件有如下几个主要目录:
1、程序运行目录,目录位置:/etc/httpd,包含conf、conf.d、logs、modules、run几个目录。
conf目录中有httpd的主配置文件httpd.conf;
conf.d目录是配置文件的组成部分,如果使用ssl模块,那么会在这个目录下生成对应的配置文件;
logs目录是软链接文件,指向/var/log/httpd是记录httpd运行时的日志文件的目录;
modules目录页是软链接文件,指向/var/lib64/httpd/modules目录,是httpd可加载的模块文件目录;
run目录同样也是软链接,指向/var/run/httpd。
2、脚本文件:/etc/rc.d/init.d/httpd
/etc/rc.d/htcacheclean:也是一个脚本文件,当把httpd用于缓存服务器时,提供缓存清理功能的脚本。
4、模块所在目录:/usr/lib64/httpd/modules(64位平台),/etc/httpd/modules目录是指向这个目录的软链接。
5、程序二进制文件所在目录:/usr/sbin,在/usr/sbin目录下有/usr/sbin/httpd、/usr/sbin/httpd.event、/usr/sbin/httpd.worker三个二进制程序文件。
httpd-2.2.15默认工作在prefork模型下,如果要工作在worker模型下可以在脚本文件中修改:6、日志文件目录:/var/log/httpd
日志文件默认为该目录下的access_log和error_log,如果需要改变,可自定义位置,并添加对应的文件,手动生成的日志文件,需要提前创建,否则启动服务时会失败。
7、站点文档根目录:/var/www/html。用来存放站点的网页文件等。
httpd的配置文件:
第一段:全局配置段
1、ServerTokens OS:ServerTokens指令用于在网页中显示使用的apache软件版本,不建议开启。2、ServerRoot "/etc/httpd":服务器运行的根目录。
3、PidFile run/httpd.pid:httpd守护进程的pid号存放的文件所在位置/var/run/httpd.pid。
4、Timeout 60:定义的是TCP/IP连接三次握手建立连接时,如果服务器没有响应,会话的超时时长默认为60秒。
5、KeepAlive {On|Off}:定义客户端连接时是否开启持久连接,默认值为Off。
6、MaxKeepAliveRequest 100:定义客户端连接时维持的最大连接数量,默认值为100。
7、KeepAliveTimeout 15:定义使用持久连接时每个连接自动断开的时长,默认值为15,注:如果服务器连接数量很多,达到连接最大值时,如果有新的连接请求,那么未处于活动状态的连接会自动断开。
8、httpd工作在prefork模型时的参数设置:
StartServers 8:httpd启动时默认启动的服务器进程数量,默认值为8
MinSpareServers 5:httpd运行时最小空闲进程数量,默认值为5
MaxSpareServers 20:httpd运行时最大空闲进程数量,默认值为20
ServerLimit 256:httpd可启动的最大进程数量,默认值为256,由于prefork模型下服务器进程与并发客户端连接数量保持1:1的对应关系,所以服务器进程可启动最大数量与并发的客户端连接数量保持一致
MaxClients 256:httpd服务进程可同时间响应的客户端连接数量,默认值为256
MaxRequestsRerChild 4000:每个服务器进程可响应的客户端对资源请求的最大次数,达到次数后该进程的生命周期会被结束。
9、httpd工作于worker模型时的参数设置:
StartServers 4:httpd启动时默认启动的服务器进程数量,默认值为4
MaxClients 300:httpd并发可响应的客户端连接数量,默认值为300
MinSpareThreads 25:工作于worker模型下的服务器进程会生成线程来响应用户请求,每个线程可以响应一个用户的请求,MinSpareThreads定义的是所有服务器进程生成的线程中最小空闲的数量,默认值为25
MaxSpareThreads:允许最大空闲的线程数量,默认值为75
ThreadsPerChild 25:每个进程可以生成的线程最大数量,默认值为25
注:在该模型下,每个线程响应一个用户的连接请求,如果一个连接断开,那么该线程的生命周期会结束。httpd服务启动时,如果没有用户连接请求,默认启动的4个进程会生成25个线程,以满足最小空闲线程的数量要求,这些线程会分布在这4个进程中。如果用户连接数量达到300甚至超出,那么就需要300个线程满足客户连接请求,相应的服务器进程数量是12个,由于有最小线程数量要求,所以相应的进程数量应该要多于12,多出的部分进程,要生成空闲的25个线程,以满足后续的连接请求。
10、Listen 80:指定服务器监听的地址和端口,IP地址省略时,默认监听所有地址,监听的地址和端口可以有多个。
11、Load Module MODULES :指定加载的模块。
12、Include conf.d/*.conf:包含conf.d/*.conf路径下的配置文件。该路径下的文件为配置文件的组成部分。
13、User apache Group apache:指定允许httpd服务的用户和组。
第二段:主服务器配置段
1、ServerAdmin root@localhost:设置服务器管理员的邮箱地址,默认值是root@localhost,可自行修改
2、ServerName www.example.com:80:设置服务器的主机名称,默认未启用,如果在/etc/hosts文件中定义的IP与主机名的解析关系与hostname中指定的主机名不一致时,会有报错信息,但不影响使用。
可以修改/etc/hosts文件中的IP与主机名称的解析条目与hostname值相同即可。
3、DocumentRoot "/var/www/html":指定站点根目录,默认值为"/var/www/html"
4、站点路径访问控制:
1)基于站点文件路径做访问控制,定义方式:
<Directory "/path/to/somewhere">
...
</Directory>
在Directory中可用的访问控制选项有:
Options:Options可用的值有Indexes,FollowSymlinks,Include,SymLinksOwnerMatch,ExecCGI
AllowOverride:支持在每个页面目录下创建.htaccess文件用于实现对此目录中资源访问时的访问控制功能,AllowOverride指令可用的值有All,None,Options,FileInfo,AuthConfig,Limit。
2)基于URL访问路径做访问控制,定义方式:
<Location "/path/to/URL">
...
</Location>
5、基于IP地址对站点资源做访问控制,使用Order指令,指令可用的值有allow,deny,默认的定义凡是是Order allow,deny Allow from all;允许所有人访问。
6、DirectoryIndex index.html index.html.var:站点目录下的默认页面,如果一个站点的资源目录有很多,每个目录下都可以设置一个默认页面,通常情况下是为网站的默认首页设定一个index.html。
7、ErrorLog logs/error_log:定义错误日志文件的位置,默认值为/etc/httpd/logs/error_log,这个文件是软链接,指向的是/var/log/httpd/error_log。默认值使用的是相对地址的定义方式,相对于程序运行的根目录/etc/httpd而言的。
8、LogLevel warn:定义错误日志的警告级别,默认值为warn,可用值有:debug、info、notice、warn、error、crit、alert、emerg,默认情况下比定义的警告级别高的错误记录都会被记录。
9、LogFormat :定义日志的显示格式,常用的格式有combined、common、referer、agent。格式中使用的各变量及其含义如下:
%h:客户端地址
%l:远程登录名,通常为-
%u:认证时输入的用户名,没有认证时为-
%t:服务器接收到用户请求的时间
%r:请求报文的起始行
%>s:响应状态码
%b:响应报文的长度,单位是字节
10、CustomLog logs/access_log combined:自定义日志文件及使用格式,默认自定义的日志文件为/etc/httpd/logs/access_log,使用的日志格式为combined。
11、Alias /URL/ "/path/to/somewhere/":路径别名,实现URL路径的映射,从而所访问的页面资源不再依赖于站点的根目录,如果定义了路径别名,那么相应的路径的访问权限需要在<Directory>...</Directory>中定义,同时别名中的路径分隔符与路径中使用的分隔符要保持一致。
在配置文件中定义的站点根目录为/var/www/html目录,所以默认情况下在浏览器中输入的路径都应该以该目录为根路径,意味着默认情况下所有的站点需要用到的文件或资源都应该在该目录下,但为了站点的目录管理更合理,而将icons目录和cgi-bin目录独立了出来,放在了/var/www目录下,与html同级,但这两个目录又是站点资源放置的主要目录,因而要访问到这两个目录就需要用Alias指令将这两个目录使用别名的方式定义出来,以便在浏览器中可以用别名的方式来访问到,这也是在配置文件中定义这两个目录的别名的原因,不过cgi-bin目录中存放的是脚本文件,所以用ScriptAlias指令来定义。
12、AddDefaultCharset UTF-8:设定默认字符集,默认值为UTF-8,这个选项有些情况下需要调整,比如安装discuz论坛时,discuz软件的默认字符集为SC_GBK,所以我们需要调整默认字符集,以便在安装过程中显示正常的中文字体,默认字符集的选项只能设定一种,不能设定多个。
如果不希望更改这里的设置,可以在浏览器的查看菜单中选择编码,然后选择使用中文编码就可以正常显示。
13、支持CGI脚本:支持使用CGI脚本的定义是在定义CGI脚本路径别名时定义出来的,使用的指令是ScriptAlias,在浏览器中输入的路径为/cgi-bin/,而/var/www/cgi-bin/是脚本默认的存放位置,访问的格式为:http://server/cgi-bin/。
第三段:虚拟主机配置
虚拟主机通常在一台物理主机中,多个虚拟主机的访问方式可以基于不同IP,不同端口或者基于主机名的方式来访问,基于主机名的多个虚拟主机的IP地址和端口是相同的,端口通常为80,主机名称部分不同,基于主机名的虚拟主机是依据请求首部中的Host字段来区分要访问的不同主机的,截图中的最后一行可以看到Host字段。