一、RPM包安装配置程序环境
1.CentOS6系列(默认httpd2.2)
(1)配置文件:/etc/httpd/conf/httpd.conf、 /etc/httpd/conf.d/*.conf()
(2)服务脚本:/etc/rc.d/init.d/httpd
配置文件:/etc/sysconfig/httpd
(3)主程序文件:/usr/sbin/httpd、 /usr/sbin/httpd.event、 /usr/sbin/httpd.worker
(4)日志文件目录:/var/log/httpd access_log: 访问日志;error_log:错误日志
(5)站点文档目录:/var/www/html
(6)模块文件路径:/usr/lib64/httpd/modules
(7)配置文件的组成:~]# grep "Section" /etc/httpd/conf/httpd.conf
###Section 1: Global Environment
###Section 2: ‘Main‘ server configuration
###Section 3: Virtual Hosts
(8)配置格式:directivevalue
directive: 不区分字符大小写;value: 为路径时,取决于文件系统;
2.CentOS6系列(默认httpd2.4)
(1)配置文件:/etc/httpd/conf/httpd.conf、 /etc/httpd/conf.d/*.conf
(2)模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf
systemd unit file:/usr/lib/systemd/system/httpd.service
(3)主程序文件:/usr/sbin/httpd(httpd-2.4支持MPM的动态切换)
(4)日志文件目录:/var/log/httpd access_log: 访问日志;error_log:错误日志
(5)站点文档:/var/www/html
(6)模块文件路径:/usr/lib64/httpd/modules
(7)服务控制:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service
二、httpd2.2主配置文件概述
主配置文件(三段)/etc/httpd/conf/httpd.conf:
# The configurationdirectives are grouped into three basic sections:
#1) Directives thatcontrol the operation of the Apache server process as a whole (the ‘globalenvironment‘).
#2) Directives thatdefine the parameters of the ‘main‘ or ‘default‘ server,which responds torequests that aren‘thandled by a virtual host. Thesedirectives also provide default values for the settingsof all virtual hosts.
#3) Settings for virtual hosts, which allow Web requests to be sent todifferent IP addresses or hostnames andhave them handled by the same Apache server proces
配置格式:directive value
directive:不区分字符大小写;
value:为路径时,是否区分字符大小写,取决于文件系统;
[[email protected] ~]# grep "Section" /etc/httpd/conf/httpd.conf |
|
### Section 1: Global Environment |
全局配置段 |
### Section 2: ‘Main‘ server configuration |
中心主机配置段 |
### Section 3: Virtual Hosts |
虚拟主机配置段 |
全局配置:其中的指令用于在全局层面配置一个Apache服务器相关属性
中心主机配置:其中的指令用于定义"主要"或者"默认"的服务,改段参数也能够够提供虚拟主机端配置的相关指令
虚拟主机段:允许Web请求从不同的IP、FQDN或者同一台Apache服务器的不同进程端口被发送
注意:中心主机段和虚拟主机段不能同时被发送,虚拟主机段可以在/etc/httpd/conf.d/*.conf被定义
三、"main" "default"段相关配置文件解析
1.修改监听的IP和Port:Listen [IP:]PORT
1) Listen指令可重复出现多次;
2) PORT不能省略,但ip可以省略;省略ip表示监听0.0.0.0.,即本机所有IP;
3) 修改监听socker,不能重新加载服务配置,必须重启服务才能生效
2.持久[长]连接功能
Persistent Connection:TCP连接建立后,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;
通过连接请求数量限制或者时间长短限制来实现TCP连接的断开
弊端:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常 响应;
解决方法:使用较短的持久连接时长,以及较少的请求数量;httpd-2.4 支持毫秒级持久时间;
配置文件 |
|
KeepAlive On|Off |
关闭|开启持久连接,默认关闭 |
MaxKeepAliveRequests 100 |
最大持久连接请求数量:100 |
KeepAliveTimeout 15 |
持久连接超时时长:15秒 |
3.MPM:Multipath ProcessModule,多道处理模块
httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;
CentOS 6的rpm包为此专门提供了应用程序文件:httpd(prefork), httpd.worker, httpd.event用于实现对不同的MPM机制的支持;
(1)查看所使用的MPM模块
[[email protected] /]# ps aux |grep httpd显示主控进程(root)和服务启动进程(apache)
默认使用的为/usr/sbin/httpd,其为prefork的MPM模块;
(2)查看httpd程序的模块列表:
查看静态编译的模块: #httpd -l
查看静态编译及动态编译的模块:#httpd -M
(3)更换使用httpd程序,以支持其它MPM机制;
编辑/etc/sysconfig/httpd文件中"HTTPD=/usr/sbin/httpd.{worker,event}",取消注释#
注意:重启服务进程方可生效
(4)MPM配置文件
对于CentOS 6的httpd2.2的event机制依然是测试使用,不建议在生产环境中使用
对于Linux而言进程和线程的效率类似,所以在httpd2.2上用线程模型取代进程模型,用worker取代prefork性能上的差别可忽略
PV: Page View |
页面访问,一个页面年会于多个资源 |
UV: User View |
用户访问量,站在独立IP量角度; |
prefork的配置: |
|
<IfModule prefork.c> |
条件式参数配置模式:prefork |
StartServers 8 |
服务器刚启动时的进程数量 |
MinSpareServers 5 |
最少空闲进程数,当小于此数时候主控进程会自动启动增加 |
MaxSpareServers 20 |
最大空闲进程数 |
ServerLimit 256 |
服务器生命周期最大在线进程数量,应该不能小于MaxClients |
MaxClients 256 |
最大并发响应数量,最大允许启动杜少进程去响应用户请求 |
MaxRequestsPerChild 4000 |
每个进程最多可以处理多少个请求,到4000销毁 |
</IfModule> |
|
worker的配置: |
|
<IfModule worker.c> |
条件式参数配置模式:prefork |
StartServers 4 |
服务器刚启动时的进程数量 |
MaxClients 300 |
最大并发响应数量,最大允许启动杜少进程去响应用户请求 |
MinSpareThreads 25 |
最少空闲线程数 |
MaxSpareThreads 75 |
最大空闲线程数 |
ThreadsPerChild 25 |
每个进程可以生成的线程数量 |
MaxRequestsPerChild 0 |
每个进程最多可以处理多少个请求,0表示无限制 |
</IfModule> |
4.DSO:动态共享模块机制,配置指令实现模块加载
通过配置指令动态加卸载模块:LoadModule <mod_name> <mod_path>
模块路径可使用相对地址[ServerRoot指令(/etc/httpd)]指向的路径而言:/etc/httpd/modules/
若不需要启用该模块,仅需用#将其注释即可
5.定义‘Main‘server(中心主机)的文档页面路径
中心主机:整个Web服务器仅提供一个Web站点
DocumentRoot "… ...":文档路径映射(网站根目录)定义,DocumentRoot指向的路径为URL路径的起始位置;
文档路径映射:DoucmentRoot指向的路径为URL路径的起始位置,其相当于站点URL的根路径;
(FileSystem) /web/host1/index.html --> (URL) /index.html
6.站点访问控制
(1)访问控制机制:基于来源地址、基于账号;
(2)可基于两种类型的路径指明对哪些资源进行访问控制
1)文件系统路径:
对目录:<Directory ""> … ... </Direcotry>
对单个文件:<File ""> … ... </File>
对匹配到的模式:<FileMatch "PATTERN"> … ... </FileMatch>
2)URL路径:
<Location ""> … … </Location>
<LocationMatch ""> …...</LocationMatch>
7.定义默认主页面:DirecotryIndex index.html index.html.var
用户访问时,定义多个主页多个的时候,工作向右逐个遍历,若都无法找到
1)报错&重新指向错误提示页面
2)返回索引列表,危险,一般仅用在下载站点
8.Directory中“基于来源地址”实现访问控制
(1)Options:此目录内资源访问属性,后跟1个或多个以空白字符分隔的“选项”列表
所有可用特性:Indexes、Includes、FollowSymLinks、SymLinksifOwnerMatch、ExecCGI、MultiViews、None、All
Indexes |
默认启用,指明URL路径下不存在与定义的主页面资源相符文件时,返回索引列表给用户,危险 |
Includes |
允许启动服务器包含 |
FollowSymLinks |
允许跟踪符号链接文件所指向的源文件; |
SymLinksifOwnerMatch |
允许跟踪符号链接文件,但是原文件的和连接文件的属主属组相同 |
ExecCGI |
允许执行CGI脚本 |
MultiViews |
允许做内容协商,十分消耗资源且不安全 |
None |
全部不可以 |
All |
全部可以访问 |
(2)AllowOverride
与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个),使用改机制会是站点十分消耗资源
对目录解析的性能影响十分的,一般不使用
All:全部可以放入
None:全部不可以放入
(3)order和allow、deny,基于来源地址的一组指令
order:定义生效次序;写在后面的表示默认法则;
Allow from, Denyfrom明确定义来源地址,可以为IP或者NetAddr网络地址
NetAddr格式可以为172.16、172.16.0.0、172.16.0.0/16、172.16.0.0/255.255.0.0
9.定义路径别名
格式:Alias /URL/ "/PATH/TO/SOMEDIR/"
DocumentRoot"/www/htdocs"
http://www.xuding.com/download/bash-4.4.2-3.el6.x86_64.rpm
/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm
Alias /download/ "/rpms/pub/"
http://www.xuding.com/download/bash-4.4.2-3.el6.x86_64.rpm
/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm
http://www.xuding.com/images/logo.png
/www/htdocs/images/logo.png
10.设定默认字符集
AddDefaultCharset UTF-8 |
添加指定的字符集 |
支持的中文字符集:GBK,GB2312, GB18030
11.日志设定
(1)错误日志:
ErrorLog logs/error_log |
错误日志位置 |
LogLevel warn |
日志级别,级别越高记录的信息越少 |
可使用的级别有:debug,info, notice, warn, error, crit, alert, emerg
(2)访问日志:
CustomLog logs/access_log combined 记录的格式
LogFormat "%h %l %u %t\"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined 不同格式定义
%h |
Remote host,客户端IP地址; |
%l |
Remote logname (from identd, if supplied)远程登录名,-表示为空; |
%u |
Remote user, (from auth; may be bogus if return status (%s) is 401);基于用户名认证登录时认证名记录 |
%t |
Time the request was received (standard english format),服务器收到请求的标准英文格式时间; |
\" |
转意符号显示"本身,不与最外层引用的冲突 |
%r |
First line of request,请求报文的道行信息(method url version);??? |
%>s |
响应状态码; |
%b: |
响应报文的大小,单位是字节,不包括响应报文的http首部; |
%{Referer}I |
请求报文当中"referer"首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来; |
%{User-Agent}I |
请求报文当中"User-Agent"首部的值;即发出请求用到的应用程序; |
LogFormatformatstrings:详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
三、基于用户的访问控制配置httpd服务
1.认证质询
WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;
(1)认证:
1)Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过,则服务器发送响应的资源;
2)认证类型:basic明文认证;digest消息摘要认证
(2)安全域
需要用户认证后方能访问的路径;应该通过名称对其进行标识,并用于告知用户认证的原因;
(3)用户的账号和密码存储
虚拟账号:仅用于访问某服务时用到的认证标识;
存储位置:文本文件、SQL数据库、ldap轻量级目录访问协议、nis
2.basic认证演示:
(1)在主配置文件中定义安全域
<Directory "… ..."> |
|
Options … ... |
定义资源访问属性方法 |
AllowOverride None |
是否允许在.htaccess存放 |
AuthType Basic |
指明认证类型 |
AuthName "STRING" |
认证提示框信息,通过字符串给出即可 |
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" |
认证时候用户的账号密码文件 |
Require user username1 username2 … |
可登陆的用户 允许账号文件中所有用户登录:Require valid-user |
</Directory> |
(2) 提供账号和密码存储(文本文件)
htpasswd[options] passwordfile username
-h: 获取帮助
-c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用;
-m:md5加密用户密码;
-s:sha1加密用户密码;
-D:删除指定用户
(3) 实现基于组进行认证
<Directory ""> |
|
Options … ... |
定义资源访问属性方法 |
AllowOverride None |
是否允许在.htaccess存放 |
AuthType Basic |
|
AuthName "STRING" |
|
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" |
|
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" |
|
Require group GROUP1 GROUP2 … |
|
</Directory> |
要提供:用户账号文件和组文件;
组文件:每一行定义一个组,自己创建一个文件即可
GRP_NAME:user1 user2 user3 ...
示例:
<Directory"/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile"/etc/httpd/conf.d/.htpasswd"
AuthGroupFile"/etc/httpd/conf.d/.htgroup"
Require group webadmin
</Directory>
四、httpd虚拟主机配置
1.实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址;
基于port:为每个虚拟主机使用至少一个独立的port;
基于FQDN:为每个虚拟主机使用至少一个FQDN;
注意:
1)一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用"main"主机;
2)配置"main"的一些指令,虚拟主机同样适用
3)通过Http协议的报文首部来进行识别判断访问
2.虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerNameFQDN
DocumentRoot " "
</VirtualHost>
(1)基于IP的虚拟主机示例:
<VirtualHost172.16.100.6:80>
ServerNamewww.a.com
DocumentRoot"/www/a.com/htdocs"
</VirtualHost>
<VirtualHost172.16.100.7:80>
ServerNamewww.b.net
DocumentRoot"/www/b.net/htdocs"
</VirtualHost>
<VirtualHost172.16.100.8:80>
ServerNamewww.c.org
DocumentRoot"/www/c.org/htdocs"
</VirtualHost>
(2)基于端口的虚拟主机:
<VirtualHost172.16.100.6:80>
ServerNamewww.a.com
DocumentRoot"/www/a.com/htdocs"
</VirtualHost>
<VirtualHost172.16.100.6:808>
ServerNamewww.b.net
DocumentRoot"/www/b.net/htdocs"
</VirtualHost>
<VirtualHost172.16.100.6:8080>
ServerNamewww.c.org
DocumentRoot"/www/c.org/htdocs"
</VirtualHost>
(3)基于FQDN的虚拟主机:
NameVirtualHost172.16.100.6:80
<VirtualHost172.16.100.6:80>
ServerNamewww.a.com
DocumentRoot"/www/a.com/htdocs"
</VirtualHost>
<VirtualHost172.16.100.6:80>
ServerNamewww.b.net
DocumentRoot"/www/b.net/htdocs"
</VirtualHost>
<VirtualHost172.16.100.6:80>
ServerNamewww.c.org
DocumentRoot"/www/c.org/htdocs"
</VirtualHost>
注意:http2.2配置基于FQDN的虚拟主机时候需要指明NameVirtualHost
五、内置的status页面
1.配置信息:
实例:基于URL访问路径
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
2.重启服务
[[email protected]]# service httpd reload
Reloadinghttpd:
3.访问:http://172.16.249.210/server-status
注意:此处应为不能给其他人所见,所以一般会和基于用户的认证去配置
Apache Server Status for 172.16.249.210 |
172.16.249.210Apache服务器状态 |
Server Version: Apache/2.2.15 (Unix) DAV/2 |
pache服务器版本 |
Server Built: Jul 24 2015 11:52:28 |
|
Current Time: Tuesday, 12-Jan-2016 21:15:24 CST |
|
Restart Time: Tuesday, 12-Jan-2016 21:14:40 CST |
|
Parent Server Generation: 1 |
|
Server uptime: 43 seconds |
|
1 requests currently being processed, 7 idle workers |
|
_W______........................................................ ................................................................ ................................................................ ................................................................ |
目前启动的进程和状态 每个字母、短下划线和点表示一个进程 此处有256个进程 |
Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process |
状态解释 |
PID Key: 3390 in state: _ , 3391 in state: W , 3392 in state: _ 3393 in state: _ , 3394 in state: _ , 3395 in state: _ 3396 in state: _ , 3397 in state: _ , |
显示进程的进程号、状态 |
httpd(2.2&2.4)RPM搭建配置定义详解