CentOS 6:httpd-2.2
            程序环境:
                配置文件:
                    /etc/httpd/conf/httpd.conf
                    /etc/httpd/conf.d/*.conf
                服务脚本:
                    /etc/rc.d/init.d/httpd
                    脚本配置文件:/etc/sysconfig/httpd
                主程序文件:
                    /usr/sbin/httpd
                    /usr/sbin/httpd.event
                    /usr/sbin/httpd.worker
                日志文件:
                    /var/log/httpd:
                        access_log:访问日志
                        error_log:错误日志
                站点文档:
                    /var/www/html(页面文件)
                模块文件路径:
                    /usr/lib64/httpd/modules
                    
                服务控制和启动:
                    chkconfig  httpd  on|off
                    service  {start|stop|restart|status|configtest|reload}  httpd


常用配置:
         
   1、修改监听的IP和PORT

        # vim /etc/httpd/conf/httpd.conf

wKiom1coXkyizFdfAAAxG2QDBzs886.png                           (1) 省略IP表示为0.0.0.0;
                    (2) Listen指令可重复出现多次;
                        Listen  80
                        Listen  8080
                    (3) 修改监听socket,重启服务进程方可生效;
               注意:改配置文件需要重启服务  service httpd restart           

                netstat -tnlp(查看当前启动的服务所用的端口)   

         2、持久连续
      tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行;
     副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常 响应;
      折衷:使用较短的持久连接时长,以及较少的请求数量;                       
                    KeepAlive  On|Off(是否开启持久连续)
                    KeepAliveTimeout  15(时间限制)
                    MaxKeepAliveRequests  100(数量限制

   # vim /etc/httpd/conf/httpd.conf

wKiom1coYbDwMGpbAAAq9VqLwIY745.png

      重启服务  service httpd restart 


    3、MPM              
                httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;

                CentOS 6的rpm包为此专门提供了三个应用程序文件:

                httpd(prefork),       httpd.worker,        httpd.event

             查看现在使用的是哪个程序文件的方法启动了多少进程:
                   #    ps  aux  | grep httpd

                第一行为主控进程(管理进程的创建和销毁)

             默认使用的为/usr/sbin/httpd,其为prefork的MPM模块 ;
                    查看httpd程序的模块列表:
                        查看静态编译的模块:
                            # httpd  -l
                        查看静态编译及动态编译的模块:
                            # httpd  -M

              更换使用httpd程序,以支持其它MPM机制;
                  #   vim /etc/sysconfig/httpd
                        HTTPD=/usr/sbin/httpd.{worker,event}
                        
                注意:重启服务进程方可生效

                         # service httpd restart 

MPM配置:  
                # vim /etc/httpd/conf/httpd.conf
                    prefork的配置        
                        <IfModule prefork.c>(如果prefork存在)
                        StartServers       8(启动多少空闲进程)
                        MinSpareServers    5(最少空闲进程数)
                        MaxSpareServers   20(最大空闲进程)
                        ServerLimit      256(允许MaxClients最大启动的进程数量)
                        MaxClients       256(最大允许启动的进程数量)
                        MaxRequestsPerChild  4000(每个进程最多可处理多少请求,处理了4000个就要销毁此进程)
                        </IfModule>        
                
                    worker的配置:
                        <IfModule worker.c>
                        StartServers         4(启动多少空闲进程)
                        MaxClients         300(最大允许启动的进程数量)
                        MinSpareThreads     25(最少空闲进程数)
                        MaxSpareThreads     75(最多空闲进程数)
                        ThreadsPerChild     25(每个主进程最大可生成多少线程)
                        MaxRequestsPerChild  0(每个进程可处理无上限的请求)
                        </IfModule>                        
                
                PV,UV
                    PV:Page View(页面浏览量)
                    UV: User View(用户浏览量)

4、DSO(动态共享模块)
                配置指定实现模块加载
                    LoadModule  <mod_name>  <mod_path>(模块文件路径)
                    
                    模块文件路径可使用相对路径:
                        相对于ServerRoot(默认/etc/httpd)


5、  定义访问主文档页面路径

    # vim /etc/httpd/conf/httpd.conf

         DocumentRoot  " "

文档路径映射:
                    DoucmentRoot指向的路径为URL路径的起始位置
                        其相当于站点URL的根路径;

注意:重启服务进程方可生效

                         # service httpd restart 


6、站点访问控制常见机制

               # vim /etc/httpd/conf/httpd.conf           
                可基于两种机制指明对哪些资源进行何种访问控制
                
                    文件系统路径:
                        <Directory  "">
                        ...
                        </Directory>
                        
                        <File  "">
                        ...
                        </File>
                        
                        <FileMatch  "PATTERN">
                        ...
                        </FileMatch>
                    URL路径:
                        <Location  "">
                        ...
                        </Location>
                        
                        <LocationMatch "">
                        ...
                        </LocationMatch>
                        
                <Directory>中“基于源地址”实现访问控制:
                    (1) Options
                        后跟1个或多个以空白字符分隔的“选项”列表;
                            Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;(建议关掉)
                            FollowSymLinks:允许跟踪符号链接文件所指向的源文件(建议关掉);
                            None:一个也没有
                            All:全部
                        建议改为:Options  None    

                    (2)  AllowOverride(允许覆盖)
                        与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;
                            All: 全部
                            None:一个也没有
                        建议改为:AllowOverride  None        
                    (3) order和allow、deny拒绝
                        order:定义生效次序;写在后面的表示默认法则;
                        
                        Allow from来源地址, Deny from来源地址
                            来源地址:
                                IP
                                NetAddr:(网络地址)
                                    172.16
                                    172.16.0.0
                                    172.16.0.0/16
                                    172.16.0.0/255.255.0.0
                        1、e.g.设置为仅允许172.16网段的主机访问:Allow from 172.16    
                        2、e.g.Deny from 172.16.100.88
                            Allow from 172.16 

                      (仅允许172.16网段的主机访问,但 172.16.100.88这台不能访问)

7、定义站点主页面:

         # vim /etc/httpd/conf/httpd.conf

                DirectoryIndex  index.html  index.html.var(先找index.html没有找到,就找index.html.var)

8、定义路径别名

  # vim /etc/httpd/conf/httpd.conf

               格式:
                    Alias  /URL/  "/PATH/TO/SOMEDIR/"
            
                DocumentRoot "/www/htdocs"
                    http://www.magedu.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.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm 

                        /rpms/pub/bash-4.4.2-3.el6.x86_64.rpm
                        
                    http://www.magedu.com/images/logo.png
                        /www/htdocs/images/logo.png
                    
            9、设定默认字符集(为防止“语言”不通,响应的页面看不懂。)
                AddDefaultCharset  UTF-8
                
                中文字符集:GBK, GB2312, GB18030


           10、日志设定
                日志类型:访问日志 和 错误日志
                
                错误日志


                    ErrorLog  logs/error_log


                    LogLevel  warn(警告)
                    错误级别: debug(所有错误的都记录下来), info(比debug更高级), notice(引起关注), warn(警告), error(发生错误), crit(级别很严重), alert(红色警戒), emerg(紧急事务).
                        
                访问日志:查看访问日志:#tail /var/log/httpd/access_log
                    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
                    CustomLog  logs/access_log  combined
                    
                    LogFormat format strings:(LogFormat格式符意思)
                        http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
                    
                        %h:客户端IP地址;
                        %l:客户端用户名, 通常为一个减号(“-”);
                        %u:客户端用户 (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
                        %t:服务器收到请求时的时间;
                        %r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”、“URL”以及协议版本;
                        %>s:响应状态码;
                        %b:响应报文的大小,单位是字节;不包括响应报文的http首部;
                        %{Referer}i:请求报文中首部“referer”的值;referer即从哪个页面中的超链接跳转至当前页面的;
                        %{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;


           11、基于用户的访问控制

           认证方式有两种:
                        basic:明文
                        digest:消息摘要认证

       此处使用  basic认证。

  # vim /etc/httpd/conf/httpd.conf


wKiom1cq_hOiNRRPAAAkHsSODvM579.png

basic认证配置示例:
                     定义安全域
                        <Directory "">(定义哪个页面资源访问时需要认证)
                            Options None
                            AllowOverride None
                            AuthType Basic(认证类型)
                            AuthName "String“(认证提示符)
                            AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"(认证时的账号密码所在的路径)
                            Require  user  username1  username2 ...(指明可登陆的用户;允许账号文件中的所有用户登录访问:Require   valid-user)
                        </Directory>


       创建账号密码文件AuthUserFile :

                    htpasswd  [options]   /PATH/TO/HTTPD_PASSWD_FILE  username
                                -c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
                                -m:md5格式加密
                                -s: sha格式加密
                                -D:删除指定用户
                        e.g. htpasswd -c -m /etc/httpd/conf/.htpasswd  tianxudong
                          注意:首次添加用户时使用-c,之后都不能使用,否则会覆盖里面原有的用户信息。


基于组账号进行认证;

# vim /etc/httpd/conf/httpd.conf

wKioL1crAs2yAJ_hAAAnSPytrcM448.png

                 相比定义用户访问控制,多加一个组认证的文件。  
                                AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
                                Require  group  grpname1  grpname2 ..  

                                            
     创建用户账号和组账号文件;
         #vim /etc/httpd/conf/.htgroup

                     mygrp: tianxidong   

     

         组文件:每一行定义一个组
                                GRP_NAME: username1  username2  ...
                             

     12、虚拟主机      
                有三种实现方案:
                    基于ip:
                        为每个虚拟主机准备至少一个ip地址;
                    基于port:
                        为每个虚拟主机使用至少一个独立的port;
                    基于FQDN:
                        为每个虚拟主机使用至少一个FQDN;

           注意:一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用'main'主机;
         禁用方法:注释中心主机的DocumentRoot指令即可;

          虚拟主机的配置方法:
                    <VirtualHost  IP:PORT>(虚拟主机所监听的端口地址)
                        ServerName FQDN(若没有用name标示,则无需写FQDN)
                        DocumentRoot  ""(虚拟主机的站点文件路径)
                    </VirtualHost>
                    
                    其它可用指令:
                        ServerAlias:虚拟主机的别名;可多次使用;
                        ErrorLog:(此虚拟主机专用的错误日志)
                        CustomLog:(此虚拟主机专用的访问日志)
                        <Directory "">(基于路径对资源做访问控制)
                        ...
                        </Directory>
                        Alias(路径别名)
                        ...

    e.g.  不同IP访问不同站点:

                   注释掉主配置文件的DocumentRoot

                      编译一个文件:
                     # vim /etc/httpd/conf.d/vhosts.conf
                              <VirtualHost 172.168.110.6:80>
                                     ServiceName www.a.com
                                     DocumentRoot "/www/a.com/htdocs"
                              </VirtualHost>

                              <VirtualHost 172.168.110.7:80>
                                     ServiceName www.b.net
                                     DocumentRoot "/www/b.net/htdocs"
                              </VirtualHost>

                              <VirtualHost 172.168.110.8:80>
                                     ServiceName www.c.org
                                     DocumentRoot "/www/c.org/htdocs"
                              </VirtualHost>
                      语法检查:httpd -t
                      重启服务:service httpd reload

                    
     e.g.     基于端口的虚拟主机:
                    首先添加3个端口:可参考上面的常用配置 1 。
                     语法检查:httpd -t
                 
                     编译一个文件:
                     # vim /etc/httpd/conf.d/vhosts.conf

                    <VirtualHost 172.16.100.6:80>
                        ServerName www.a.com
                        DocumentRoot "/www/a.com/htdocs"
                    </VirtualHost>

                    <VirtualHost 172.16.100.6:808>
                        ServerName www.b.net
                        DocumentRoot "/www/b.net/htdocs"
                    </VirtualHost>

                    <VirtualHost 172.16.100.6:8080>
                        ServerName www.c.org
                        DocumentRoot "/www/c.org/htdocs"
                    </VirtualHost>
                     语法检查:httpd -t
                     重启服务:service httpd reload
                    
          e.g.     基于FQDN的虚拟主机:(端口一样、地址一眼样)
                    NameVirtualHost 172.16.100.6:80(基于FQDN的虚拟主机需要加一个专门的指令,Centos7不需要此指令)

                    <VirtualHost 172.16.100.6:80>
                        ServerName www.a.com
                        DocumentRoot "/www/a.com/htdocs"
                    </VirtualHost>

                    <VirtualHost 172.16.100.6:80>
                        ServerName www.b.net
                        DocumentRoot "/www/b.net/htdocs"
                    </VirtualHost>

                    <VirtualHost 172.16.100.6:80>
                        ServerName www.c.org
                        DocumentRoot "/www/c.org/htdocs"
                    </VirtualHost>                                            
                     语法检查:httpd -t
                     重启服务:service httpd reload   

          13、status页面(查看运行中的进程详细情况,应加以访问认证)
                LoadModule  status_module  modules/mod_status.so
                编辑主配置文件,将以下几行启用。
                <Location /server-status>
                    SetHandler server-status
                    Order allow,deny
                    Allow from 172.16(建议设置为只允许某台主机访问)
                </Location>


        14、使用mod_deflate模块压缩页面优化传输速度

            适用场景:
                (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
                (2) 压缩适于压缩的资源,例如文件文件;

        # vim /etc/httpd/conf/httpd.conf

wKioL1csWR_hBCbzAACMy0TqJik127.png

                          语法检查:httpd -t
                          重启服务:service httpd reload    


CentOS 6上编译安装httpd2.4版本:


           CentOS 6默认apr和 apr-util是1.39版的,而httpd2.4,需要 apr和 apr-util 是1.4版本以上的。

              可以去 apr.apache.org官网下载1.4版本的。

              开发环境包组:Development Tools, Server Platform Development
              开发程序包:pcre-devel

                先关掉httpd服务不要开机自动启动
                 # service httpd stop
                 # chkconfig httpd off
                
                编译安装步骤:
                    (1) apr-1.4+
                        # ./configure  --prefix=/usr/local/apr
                        # make && make install
                        
                    (2) apr-util-1.4+
                        # ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
                        # make && make install
                        
                    (3) httpd-2.4
                        # ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
                        # make  && make install