一、CentOS 6中httpd相关介绍

系统所带rpm包为:httpd-2.2.15-39.el6.centos.x86_64

配置文件

    /etc/httpd/conf/httpd.conf 

    /etc/httpd/conf.d/*.conf  

[root@localhost ~]# grep "Section" /etc/httpd/conf/httpd.conf

### Section 1: Global Environment     //全局环境设置

### Section 2: 'Main' server configuration  //中心服务器配置

### Section 3: Virtual Hosts   //虚拟主机相关配置

服务脚本:

            /etc/rc.d/init.d/httpd   

            脚本的配置文件 : /etc/sysconfig/httpd   

主程序文件: /usr/sbin/httpd.*  默认使用prefork ,可以在服务脚本的配置文件中切换使用   

日志文件目录: /var/log/httpd  

            access_log : 访问日志  

            error_log : 错误日志,记录web服务器启动停止,运行过程中的错误信息   

站点文档目录: /var/www/html   


二、httpd配置文件的相关配置介绍

2.1、修改监听的服务端口    Listen [ip:]PORT
2.2、持久连接(长连接)

连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成

如何断开持久连接?可以通过数量限制和时间限制来实现 

   KeepAlive  on | off

   MaxKeepAliveRequests : 持久连接时最大请求资源数 

   KeepAliveTimeout :持久连接的时间限制 

2.3、MPM-多路处理模块

httpd-2.2 不支持同时编译多个模块,只能在编译时选定一个,rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持,确认方法:ps aux | grep httpd 

/usr/sbin/httpd   #prefork模型(默认模型)

/usr/sbin/httpd.event   #event事件驱动模型

/usr/sbin/httpd.worker  #worker模型

 

2.4、DSO(动态共享对象)
配置指令实现模块加载 

       LoadModule <mod_name> <mod_path>

模块路径可使用相对地址

 相对于ServerRoot(/etc/httpd)指向的路径           

2.5、DocumentRoot 

(在主服务器段设置)

DocumentRoot指向的路径为URL路径的起始位置
2.6、站点访问控制

文件系统路径:站点目录及其子目录

    <Directory " "> </Directory>

  URL路径:网页

     <Location " "> </Location>

访问控制机制:

    基于来源地址--见2.7

    基于账号--见2.8

2.7、基于来源地址的访问控制

(1)Options对于此目录资源的访问属性方式

   Indexes : 索引 

   FollowSymLinks : 跟踪符号连接指定的文件,无论这个文件在什么地方都运行访问其原文件

   None : 不支持任何选项    (安全做法)


(2)Order检查次序

          Order allow,deny(默认机制)   白名单

          Order deny,allow(默认机制) 黑名单

         Allow from    

          Deny from 

2.8、基于账号

 认证质询: 

   WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码


  认证:Authorization:客户端用户填入账号和密码后再次发送请求报文,认证通过,服务器发送响应的资源

            认证类型:  

                        basic:明文

                        digest:消息摘要;经过md5加密

2.9、basic认证定义格式

  (1)基于用户

   <Directory " PATH">

       Options None

       AllowOverride None

       AuthType Basic

       AuthName "随便字符串"  # 告诉用户为什么要弹出对话框

       AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"  

       Require user username1 username2 

   </Directory>

   <Location "" >

     .........

  </Location>

     允许账号文件中的所有用户登录访问:Require valid-user


(2)基于组

<Directory " PATH">

       Options None

       AllowOverride None

       AuthType Basic

       AuthName "随便字符串"  # 告诉用户为什么要弹出对话框

       AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" 

         AuthGroupFile "/PATH/TO/HTTPD_GROUP_PASSWD_FILE" 

       Require group group1 group2 

   </Directory>

   <Location "" >

     .........

  </Location>



(3)添加用户的方法-htpasswd命令

  第一次创建的时候用-c ; # htpasswd -c -m /etc/httpd/conf.d/.htpasswd user1 

  加第2个的时候要给-c选项去掉  # htpasswd -m /etc/httpd/conf.d/.htpasswd user2   

             -D 删除用户的 

             -m:md5加密的用户密码

             -s:sha1加密用户密码 

2.10、定义默认主页面

DirectoryIndex index.html index.html.var

         为空,将会给所有页面都显示

2.11、httpd日志设定

错误日志

       ErrorLog  logs/error_log 

       LogLevel

  日志级别:

     debug, info, notice, warn, error, crit, alert, emerg.

    

访问日志

       CustomLog logs/access_log combined                   

       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  

组合格式

       %h  远程主机,客户端的ip地址 

       %l  远程登录的用户名,不是表单登录,而是使用mod_identity模块登录使用的 

       %u 认证时候输入的用户名

       %t  服务器收到请求的时间 

       %r:请求报文的首行信息 (method url version)

       %>s: 响应状态码

       %b:响应报文的大小 单位为字节,不包含响应报文首部            %{Referer}i:请求报文referer首部的值 ;referer:到达当前页面的访问入口,即从哪儿个页面的超链接跳转 

      %{User-Agent}i:请求报文当中“User-Agent”首部的值;及发出请求用到的应用程序;用户代理(浏览器类型)    

2.12、设定默认字符集

AddDefaultCharset UTF-8  | GBK | GB2312 | GB18030


2.13、虚拟主机设定方法

虚拟主机的3种类型:

1、基于ip : 为每个虚拟主机准备至少一个ip地址 

2、 基于port : Listen 8080

       为每个虚拟主机装备至少一个专用端口,实践中很少使用 

3、基于hostname ; NameVirtualHost 对应ip地址:端口 

               为每个虚拟主机准备至少一个专用hostname

可混合使用上述三种方式任意方式 

        注意:一般虚拟主机莫与中心主机混用,所以要使用虚拟主机,先禁用中心主机 


每个虚拟主机都有专用配置:

            < VirtualHost "IP:PORT" >

                      ServerName 

                      DocumentRoot "" 

                  ServerAlias : 虚拟主机的别名 

                  ErrorLog

                   CustomLog 

               <Directory ""> 可设置访问控制 


               </Directory>

        </VirtualHost >          

2.14、内置的status页面 server-status定义 

#ExtendedStatus On    

 <Location /server-status>

     SetHandler server-status

   </Location> 

2.15、httpd常用的status

1xx:100-101, 信息提示;

2xx:200-206, 成功

3xx:300-305, 重定向

4xx:400-415, 错误类信息,客户端错误

5xx:500-505, 错误类信息,服务器端错误


常用的状态码:

200: 成功,请求的所有数据通过响应报文的entity-body部分发送;OK

301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently  永久重定向   

302: 与301相似,但在响应报文中通过Location指明资源现在所处临时新位置;  Found

304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified

401: 需要输入账号和密码认证方能访问资源;Unauthorized

403: 请求被禁止;Forbidden

404: 服务器无法找到客户端请求的资源;Not Found

500: 服务器内部错误;Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应;Bad Gateway      网关配置错误


三、https

     tcp 443

配置httpd支持https的方法:

(1) 为服务器申请数字证书;

测试:通过私建CA发证书

(a) 创建私有CA

(b) 在服务器创建证书签署请求

(c) CA签证

(2) 配置httpd支持使用ssl,及使用的证书;

# yum -y install mod_ssl

                 # httpd -M | grep ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot       #URL起始位置,及虚拟主机的网站目录

ServerName           # 主机名

SSLCertificateFile    # 证书文件

SSLCertificateKeyFile  # 证书文件所对应的私钥文件

(3) 测试基于https访问相应的主机;

          # openssl s_client [-connect host:port] -CApath [-CAfile filename]