1、centos6、centos7安装后相应文件对比



centos6centos7备注
配置文件

/etc/httpd/conf/httpd.conf

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

/etc/httpd/conf/httpd.conf

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


服务脚本

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

/usr/lib/systemd/system/httpd.service
脚本配置文件/etc/sysconfig/httpd

主程序文件

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

/usr/sbin/httpd

httpd2.4支持pmp动态切换
日志文件/var/log/httpd{acces_log,error_log}/var/log/httpd{acces_log,error_log}
模块文件路径
/usr/lib64/httpd/modules/

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


站点文档
/var/www/html
/var/www/html
服务控制

service {stats |stop|restart|status|reload|configtest} httpd

systemctl    httpd {stats |stop|restart|status} 



开机启动
chkconfig httpd onsystemctl enable httpd.service


2、centos6主配置文件组成:/etc/httpd/conf/httpd.conf

    [root@localhost ~]# grep -i   "section"  /etc/httpd/conf/httpd.conf 

    主要有三部分组成:

    Section 1: Global Environment        //4.1-4.4为此部分位置

    Section 2: 'Main' server configuration

     Section 3: Virtual Hosts

注意:一般而言,section2是定义默认主机的和匹配不到section3配置的默认处理设置


3、主配置文件格式:

    directive value   //指令   值

    directive:不区分字符大小写

    value:为路径时,是否区分字符大小写,取决于文件系统的属性4、        


4、主文件常用配置:建议作个备份(#cp )

    备份:[root@localhost conf]# cp -iv httpd.conf httpd.conf.bak

    或者 [root@localhost conf]# cp -iv httpd.conf{,.bak}


4.1、修改监听都得IP和端口:

    Listen IP[:80]  //监听绑定的httpd服务主机的ip地址:端口信息 ;可以监听多个地址和端口

      如: Listen 80

        Listen 1.1.1.1:80 

        Listen 2.2.2.2:80


4.2、持久连接:persistent connections

    tcp连接建立后,每个资源获取完成后不会断开,而是继续等待其他资源请求的进行。那么怎么断开比较合理呢?可以通过连接的数量和时间进行限制。

        数量限制:MaxKeepAliveRequests 100  //默认一个会话最大传输100个资源

        时间限制:KeepAliveTimeout 15     //默认最大请求持续时间15s

    

    持久连接的副作用:

        对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应。

        折中方法:

            使用较短的持久连接时长,以及较少的请求数量。


    持久连接配置示例:

        KeepAlive Off|On   //关闭或开启长连接

        MaxKeepAliveRequests 100                   

        KeepAliveTimeout 15


    测试方法:

        telnet WEB_SERVER_IP PORT

        GET /URL HTTP/1.1

        HOST: WEB_SERVER_IP

      如:

        [root@localhost ~]# telnet 192.168.0.105 80

        Trying 192.168.0.105...

        Connected to 192.168.0.105.

        Escape character is '^]'.

        GET /test.html http/1.1

        host 192.168.0.105

        注意:敲两次回车,第一次是换行符,第二次是回车符

        

4.3、配置MPM机制:(multipath processing modules:多路处理模块)

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

    centos6的MPM包为此专门提供了三个应用程序文件:httpd(prefork)、httpd.worker、httpd.event,分别用于实现对不同的MPM机制的支持。

    确认现在使用的是哪个程序文件(MPM)的方法:        

        [root@localhost conf.d]# ps aux | grep httpd

        root       4229  0.0  0.0 105444  1000 pts/0    S+   10:50   0:00 less /etc/httpd/conf/httpd.conf

        root       4699  0.0  0.3 173484  3740 ?        Ss   11:55   0:00 /usr/sbin/httpd  //使用httpd(prefork)

        [root@localhost conf.d]# /usr/sbin/httpd -l  


    默认使用的为:/usr/sbin/httpd,其为prefork的MPM模块;

        查看httpd程序的模块列表:

            查看静态编译的模块:[root@localhost conf.d]# httpd -L | less

            产看静态编译及动态编译的模块:[root@localhost conf.d]# httpd -M

      

    更换使用httpd程序,以支持MPM机制:

        修改脚本配置文件:/etc/sysconfig/httpd;更改如下配置:

              HTTPD=/usr/sbin/httpd.worker.{worker,event}                 

            [root@localhost conf.d]# ps aux | grep httpd

            root       4229  0.0  0.0 105444  1000 pts/0    S+   10:50   0:00 less /etc/httpd/conf/httpd.conf

            root       4561  0.0  0.3 173688  3944 ?        Ss   11:50   0:00 /usr/sbin/httpd.worker  //使用httpd(worker)

        注意:重启服务方可生效,event在centos6处于测试阶段。

            [root@localhost conf.d]# watch -n1 `ps aux | grep httpd`   //每1s刷新一次`ps aux | grep httpd` 命令执行的结果


4.3.2、MPM配置:

      prefork的配置:

        <IfModule prefork.c>

        StartServers       8    //进程启动时,启动8个子进程

        MinSpareServers    5    //最小空闲进程数量

        MaxSpareServers   20      //最大空闲进程数量

        ServerLimit      256    //最大服务器进程数量

        MaxClients       256    //允许启动的服务器进程的最大数目,即最大并发访问量

        MaxRequestsPerChild  4000  //每个进程可以处理的最大请求,达到后即销毁,在创建一个进程

        </IfModule>

        

     worker的配置:

        <IfModule worker.c>

        StartServers         4  //进程启动时,启动4个子进程

        MaxClients         300  //同时客户端连接的最大数目

        MinSpareThreads     25   //最小空闲线程

        MaxSpareThreads     75   //最大空闲线程

        ThreadsPerChild     25   //每个进程生成的线程

        MaxRequestsPerChild  0    //每个进程处理的请求不受限制

        </IfModule>


    pv:page view

    uv:user view


4.4、DSO:dynamic shared object,动态共享对象       

    配置指令实现模块加载:

        方法:LoadModule <MOD_NAME> <MOD_PATH> 

            MOD_NAME:模块名称

            MOD_PATH:模块路径,可使用相对路径和绝对路径,相对路径是对于SERVEROOT而言,默认/etc/httpd

            [root@localhost httpd]# ls /etc/httpd/modules/

            mod_actions.so          mod_authz_owner.so  mod_ext_filter.so      mod_proxy_ftp.so

            mod_alias.so            mod_authz_user.so   mod_filter.so          mod_proxy_http.so

            mod_asis.so             mod_autoindex.so    mod_headers.so         mod_proxy_scgi.so

            mod_auth_basic.so       mod_cache.so        mod_ident.so           mod_proxy.so

            mod_auth_digest.so      mod_cern_meta.so    mod_include.so         mod_reqtimeout.so

            mod_authn_alias.so      mod_cgid.so         mod_info.so            mod_rewrite.so

            mod_authn_anon.so       mod_cgi.so          mod_ldap.so            mod_setenvif.so

            mod_authn_dbd.so        mod_dav_fs.so       mod_log_config.so      mod_speling.so

            mod_authn_dbm.so        mod_dav.so          mod_log_forensic.so    mod_status.so

            mod_authn_default.so    mod_dbd.so          mod_logio.so           mod_substitute.so

            mod_authn_file.so       mod_deflate.so      mod_mime_magic.so      mod_suexec.so

            mod_authnz_ldap.so      mod_dir.so          mod_mime.so            mod_unique_id.so

            mod_authz_dbm.so        mod_disk_cache.so   mod_negotiation.so     mod_userdir.so

            mod_authz_default.so    mod_dumpio.so       mod_proxy_ajp.so       mod_usertrack.so

            mod_authz_groupfile.so  mod_env.so          mod_proxy_balancer.so  mod_version.so

            mod_authz_host.so       mod_expires.so      mod_proxy_connect.so   mod_vhost_alias.so

    DSO配置示例:

        LoadModule auth_basic_module modules/mod_auth_basic.so

        LoadModule auth_digest_module modules/mod_auth_digest.so

        

4.5、定义“main server”文档页面路径,中心主机配置

    定义页面资源访问的根:即资源都放在此目录下   

        DocumentRoot "/var/www/html"

    

    文档路径映射:

        DocumentRoot指向的路径为URL路径的起始位置,其相当于站点;

        在centos6的httpd-2.2中修改了文档页面路径,重启或reload后生效;但在httpd-2.4中必须修改站点访问控制才能生效。


4.6、站点访问控制:常见机制

    可基于两种机制指明对哪些资源进行何种访问控制。

        ·文件系统路径

        ·URL路径   


    文件系统路径:/var/www/html/index.html

    URL:  /index.html


4.6.2、站点访问控制格式:


    文件系统路径访问控制:

        方法一:对目录

        <Directory "路径" >   //对目录及此目录下的所有资源内容,定义指定产生的效用

           指令

        </Directory >


        方法二:对单个文件

        <File"文件路径" >

          指令

        </File >


        方法三:基于模式匹配

        <FileMatch "PATTERN" >   //基于匹配模式进程访问控制,但由于效率低不建议使用此种方法

          指令

        </FileMatch >


    URL路径访问控制

        方法一:

        <Location "文件或目录" >

          指令

        </Location >


        方法二:

        <LocationMatch "路径匹配"

          指令

        </LocationMatch>


4.6.3、<directory>中基于“源地址”实现访问控制:

    ①、options:定义此目录中资源访问的特性,后跟一个或多个空白字符分隔的“选项”列表

        常见的选项:

            Indexes:指定的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户,indexes在下载站点中有用,否则很危险。   

            FollowSymLinks:允许跟踪符号链接文件指向的源文件;此选项也很危险

            SymLinksifOwnerMatch

            ExecCGI 

            MultiViews

            建议:options None

 

    ②、AllowOverride:与访问控制相关的哪些指令可以放在(.htaccess)文件中;.htaccess在每个目录下都可以有一个;

        All:所有指令都可以存放

        None:所有指令都不可以存放

        建议:AllowOverride None


    ③、order和allow、deny:基于源地址作访问控制

        order:定义生效次序,写在后面的表示默认法则

        Allow from 

        Deny from

            来源地址:IP或网络,格式如下:

                172.16

                172.16.0.0

                172.16.0.0/16

                172.16.0.0/255.255.255.0


4.7、定义站点主页面:

    格式:DirectoryIndex index.html index.html.var  


4.8、定义路径别名:

    格式:Alias /URL "/PATH/TO/SOMEDIR"

                  

  示例解析:

    定义文档根路径:

        DocumentRoot "/var/www/html"

    本机资源路径:/var/www/html/bash-4.4.rpm

    URL路径:http://magedu.com/bash-4.4.rpm 

    若果定义了别名:如下:

    Alias /download/ "/rpms/pub/"   //注意“/”符号要对应

    此时:

    URL路径:http://magedu.com/download/bash-4.4.rpm

    对应的本地文档为:

    /var/www/html/rpms/pub/bash-4.4.rpm

 

    但是URL路径:http://magedu.com/images/logo.png

    对应的本地文档仍为:/var/www/html/images/logo.png


    注意:只有定义了路径别名的download路径才会被转到rpms/pub路径下


  示例:

    在配置文件中随便找个位置添加,建议和系统中的Alias放一起

    Alias /download/ "/hostsfile/"       


4.9、设定默认字符集:

    AddDefaultCharset UTF-8

    中文字符集:GBK、GBK2312、GBK18030


4.10、日志设定:

    日志类型:访问日志、错误日志(程序产生的错误、用户访问错误)

  

    错误日志:ErrorLog logs/error_log  //logs是一个符号链接文件,指向/var/logs

    日志等级:LogLevel warn        //日志等级有:debug, info, notice, warn, error, crit,alert, emerg.

      

    访问日志:CustomLog logs/access_log common   //common指明日志格式的格式串名称。

        它定义在此处:

            LogFormat "%h %l %u %t \"%r\" %>s %b" common

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

                %h:remotehost;客户端IP地址

                    %l:remotehostname;远程用户名,通常为一个横杠“-”

                %u:remoteuser;分为登录访问时,为一个横杠“-”                                 

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

                \%r\:请求报文的首行;GET /URL HTTP/1.0,记录了此次请求的方法、url、以及协议版本。

                %>s:响应状态码

                %b:不包含响应报文的http首部,响应报文的大小(单位是字节)

                \"%{Referer}i\:请求报文中首部“referer”的值,即从哪个页面中的超链接跳转至当前页面的。

                \"%{User-Agent}i\:请求报文中首部“user-agent”的值,即发出请求的程序。

     格式串中各参数意义参考:httpd.apache.org网站查看日志中的格式意义。

       

4.11、基于用户的访问控制       

    认证质询:authenticate

        服务器响应给客户端一个www-authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码


    认证:authorization:

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

    认证方式有两种:

        basic:明文

       digest:消息摘要认证


    安全域:

        需要认证后方能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因

        

    用户账号和密码的存放:

        虚拟账号:仅用于访问某些服务时用到的认证标识。

    存储格式:

        文本文件

        sql数据库

        ldap目录存储


basic认证配置格式:    

    ①、定义安全域:

        <directory  "文件路径">

        Options  None

        Allowoverride None

        AuthType Basic        

        AuthName "sting"    //认证时的提示信息

        AuthuserFile "认证时使用的文件"    //指定用户认证的文件

        Require  user username1 username2 ...  //仅允许哪个用户进行访问

        Require group ....

        AuthGroupFile  "/PATH/TO/HTTPD_GROUP_FILE"   //指定组认证的文件

        Require valid-user   //允许账号文件(authuserfile)中的所有用户登录。

        </directory>

    ②、提供账号和密码存储文件(文本文件),使用专用命令完成此类文件的创建和用户管理

        htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具

        命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME

        OPTIONS:

            -c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。

            -m:md5格式加密

            -s:sha格式加密

    ③、重载httpd服务。

        #httpd  -t  //检查配置文件语法错误

      或 #service httpd configtest  //检查配置文件语法错误 

        #service httpd reload

        


basic用户认证配置示例:

    ① 定义安全域

    <Directory "/var/www/html">

    OPtions None   

    Order allow,deny 

    Allow from all

    AllowOverride None

    AuthType Basic

    AuthName "attions please"

    AuthUserFile /etc/httpd/conf/.htpasswd

    Require user tom

</Directory> 

   ②、创建用户名和密码:

    [root@localhost ~]# htpasswd -c /etc/httpd/conf/.htpasswd tom   //创建密码文件并创建用户,仅在第一次时创建文件

    [root@localhost ~]# htpasswd -m /etc/httpd/conf/.htpasswd jerry  //在原有的文件中创建用户和密码

    ③、重载服务

    [root@localhost ~]# httpd -t    

    [root@localhost ~]# service  httpd reload    


basic用户组认证配置格式:


    ①、定义安全域:

        <directory  "文件路径">

        Options  None

        Allowoverride None

        AuthType Basic        

        AuthName "sting"    //认证时的提示信息

        AuthGroupFile  "/PATH/TO/HTTPD_GROUP_FILE"   //指定组认证的文件

        Require valid-user   //允许账号文件中的所有用户登录。一般和Require user使用其中之一。

        </directory>

    ②、提供账号和密码存储文件(文本文件),

        ·使用专用命令(htpasswd)完成此类文件的创建和用户管理; htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具

        ·然后使用文本编辑工具(如vim),进行创建组用户文件;

            格式如下:每一行定义一个组,然后把用户加到组中。

            Group_name:username1 username2 username...


        htpasswd命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME

        OPTIONS:

            -c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。

            -m:md5格式加密

            -s:sha格式加密

    ③、重载httpd服务。

        #httpd  -t  //检查配置文件语法错误

      或 #service httpd configtest  //检查配置文件语法错误 

        #service httpd reload

        

4.12、虚拟主机配置


    站点标识:socket

        IP相同,但端口不同   //用户访问时需要加端口号

        IP不同,但端口仍为默认端口  //每个站点一个IP地址,但是对于外网来说也要将其映射为不同的外网IP地址,用户方可访问

        IP相同、端口相同、但FQDN不同,它通过在http请求报文首部标识(如:HOST://www.magedu.com)来区分不同站点,


    虚拟主机实现方式:以下三者可同时使用。

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

        基于PORT:为每个虚拟主机使用使用至少一个独立的PORT

        基于FQDN:为每个虚拟主机使用至少一个FQDN。

注意:一般虚拟主机不要与中心主机混用;因此要使用虚拟主机,得先禁用“main主机”

    禁用方法:注释掉主机的DocumentRoot指定即可。        


虚拟主机的配置方法:每个虚拟主机专用配置段。

    <VirtualHost IP:PORT>     //定义虚拟主机的IP和port

    ServerName FQDN

    DocumentRoot "/path/to/root_path"    //指定站点路径

    </VirtualHost>

    其他可用指令:

        ServerAlias:虚拟主机的别名,可多次使用

        ErrorLog:虚拟主机专用的错误日志

        CustomLog:虚拟主机的专用访问日志

        <Directory " ">

        指令....

        </Directory>

       Alias    //路径别名


4.12.1、虚拟主机基于不同IP地址配置示例:

    ①、配置主机IP地址:eth0:192.168.0.105;eth0:0:192.168.0.112;eth0:1:192.168.0.113

    ②、创建站点路径:[root@localhost ~]# mkdir -pv /www/{a.com,b.net,c.org}/htdocs

    ③、创建站点内网页:

        [root@localhost ~]# vim /www/a.com/htdocs/index.html

        [root@localhost ~]# vim /www/b.net/htdocs/index.html 

        [root@localhost ~]# vim /www/c.org/htdocs/index.html 

    ④、注释掉中心主机配置:#DocumentRoot "/var/www/html" 

    ⑤、添加虚拟主机:建议在/etc/httpd/conf.d/目录下新建,便于以后自动化运维

        [root@localhost ~]# cat /etc/httpd/conf.d/vhost.conf

        <VirtualHost 192.168.0.105:80>

         ServerName www.a.com

         DocumentRoot "/www/a.com/htdocs/"

        </Virtualhost>

        <VirtualHost 192.168.0.112:80>

         ServerName www.b.net

         DocumentRoot "/www/b.net/htdocs/"

        </Virtualhost>

        <VirtualHost 192.168.0.113:80>

         ServerName www.c.org

         DocumentRoot "/www/c.org/htdocs/"

        </Virtualhost>

        [root@localhost ~]#                

    ⑥、检查配置文件语法:

        [root@localhost ~]# httpd -t

    ⑦、重启服务:

        [root@localhost ~]# service httpd reload

    ⑧、验证:

        http://192.168.0.105

        http://192.168.0.112

        http://192.168.0.113

     注意:验证时需关闭selinux、iptables,否则不成功。


4.12.2、虚拟主机基于同一个IP地址、不同端口配置示例:

   [root@localhost conf.d]# cat /etc/httpd/conf.d/vhost.conf

    listen 808   //添加监听端口,在主配置文件中添加也是一样的

    listen 8080   //添加监听端口,在主配置文件中添加也是一样的

    <VirtualHost 192.168.0.105:80>

     ServerName www.a.com

     DocumentRoot "/www/a.com/htdocs/"

    </Virtualhost>

    <VirtualHost 192.168.0.105:808>

     ServerName www.b.net

     DocumentRoot "/www/b.net/htdocs/"

    </Virtualhost>

    <VirtualHost 192.168.0.105:8080>

     ServerName www.c.org

     DocumentRoot "/www/c.org/htdocs/"

    </Virtualhost>

    [root@localhost conf.d]#


4.12.3、虚拟主机基于FQDN配置示例: 

    [root@localhost conf.d]# cat vhost.conf

    NameVirtualHost 192.168.0.105:80   //如果要基于FQDN访问网站,httpd-2.2中必须有此项,httpd-2.4中可以没有,此配置在主配置文件项中添加也可以。

    <VirtualHost 192.168.0.105:80>

     ServerName www.a.com

     DocumentRoot "/www/a.com/htdocs/"

    </Virtualhost>

    <VirtualHost 192.168.0.105:80>

     ServerName www.b.net

     DocumentRoot "/www/b.net/htdocs/"

    </Virtualhost>

    <VirtualHost 192.168.0.105:80>

     ServerName www.c.org

     DocumentRoot "/www/c.org/htdocs/"

    </Virtualhost>

    [root@localhost conf.d]#

    注意:测试是基于FQDN的,如果没有Dns,可以在要访问的的主机的hosts文件中添加名称映射关系。


4.13、status页面(httpd进程状态页面):主配置文件

    ①、LoadModule status_module modules/mod_status.so  //确保主文件中有加载此模块,否则status不可用。

    ②、启用<Location /server-status>

        <Location /server-status>

         SetHandler server-status

         Order deny,allow

         Deny from all

         Allow from .example.com  //需要考虑安全访问。

         </Location>

    ③、检查配置文件语法:

        #httpd -t

    ④、找一个可以的页面,在其后面加上server-status

        如:http://www.a.com/server-status        

http://www.a.com/server-status   
Apache Server Status for www.a.com 

Server Version: Apache/2.2.15 (Unix) DAV/2 
Server Built: Dec 5 2012 04:03:01 

Current Time: Wednesday, 07-Feb-2018 20:54:26 CST 
Restart Time: Wednesday, 07-Feb-2018 20:54:20 CST 
Parent Server Generation: 0 
Server uptime: 5 seconds 
1 requests currently being processed, 7 idle workers 

__W_____........................................................ 
................................................................ 
................................................................ 
................................................................ 

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: 

   6643 in state: _ , 6644 in state: _ , 6645 in state: W 
   6646 in state: _ , 6647 in state: _ , 6648 in state: _ 
   6649 in state: _ , 6650 in state: _ , 

To obtain a full report with current status information you need to use the ExtendedStatus On directive. 
Apache/2.2.15 (Red Hat) Server at www.a.com Port 80