httpd(httpd.*)命令:

   -h 显示帮助

  -t 显示主配置文件语法是否有错误 

 -M 显示当前服务加载的模块

-l 显示编辑进内核的模块

  

安装httpd:

   rpm包安装:CentOS base源:

   编译安装:定制新功能时才建议使用编译安装(采用编译安装不利于运维)

  CentOS6:httpd-2.2

   sysinit脚本启动:/etc/rc.d/init.d/httpd

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

                         /etc/httpd/conf.d/*.conf (包括模块配置文件)

        程序文件:

          /etc/sbin/httpd

           /etc/sbin/http.event

           /etc/sbin/httpd.worker

        在CentOS6上主配置文件有三个,因为不支持DSO动态装卸载  

       修改默认启动哪个文件修改:/etc/sysconfig/httpd文件

       日志文件:/var/log/httpd

               access_log:访问日至 (分析用户对那些商品感兴趣)

               error_log:错误日至

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

模块文件目录:/usr/lib64/httpd/modules/

  CentOS7:httpd-2.4

    Systemd Unit File: /user/lib/systemd/system/httpd/service

在CentOS7上支持DSO动态装卸载所以只有一个主文件和不同的模块

 大部分和Centos6相同,但主程序直有一个,event和worker换成换成模块方式提供

   配置文件增加:/etc/httpd/conf.moudles.d/*.conf (模块配置文件)

 开机自动启动:systemctl enable httpd.service 

启动服务后,默认/etc/httpd/conf.d/welcome.conf文件是测试页面,如果移除此文件则显示目录索引结构(看配置是否开启)或401(3?)

 http2.2的基础配置文件:

    /etc/httpd:ServerRoot

            conf/httpd.con,conf.d/*.conf:配置文件

           logs:日志文件

modules:模块文件

主配置文件:/etc/httpd/conf/httpd.conf 

       配置文件由指令和值组成 :

      directive(不区分大小写,但约定首字母大写) +value

    value:除了路径意外,大多数不区分大小写

主配置文件 /etc/httpd/conf/http.conf

 主配置文件分三段:

     1,全局配置段:   ## Section 1 : Global Environment

     2,中心主机配置:   ##Section 2:'Main' service configuraton

     3,虚拟主机配置:   ##Section 3:Virtual Hosts

2,3通常不会同时生效  

修改后生效:

reload 重载 

restart 重启服务 通常仅修改舰艇端口和地址才会使用 

 

全局配置段:(重启之前先httpd -t检查配置文件是否有语法错误)

1 修改监听端口和地址:

    Listen [IP:] PROT     

   (1)指令可定义多次; 

      (2) 省略IP,表示0.0.0.0(本机上所有有效ip); 

2 持久链接(默认一个web有n个资源 一次链接请求一个资源就必须多次握手请求n个资源 此功能制定是否持久链接让一次链接请求多个资源这样可以节约大量资源 )

   persistent connection:tcp链接建立后,资源获取完成不会断开链接,而是继续等待请求其他资源,通常情况资源请求完毕客户端会断开,如果不断开经过一段时间后服务器会断开服务,从而释放资源给下一个客户提供服务)

    数量限制和时间限制 对于并发过大的服务断时间这个时间相对较短 

KeepAlive on|off (是否开启持久链接)

MaxKeepAliveRequests (最大请求资源数量)

KeepAliveTimeout (持久链接时间s)

3 MPM 多路处理模块 (multipath processing module)

  http2.2不支持DSO机制,event为测试;为三个命令(httpd,httpd.worker,http.event)

 制定默认开启的模块服务在主配置文件里:

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

主配置文件中模块的配置段:

<IfModule prefork.c> (主控进程和几个子进程,子进程等待被链接,主控进程root身份,子进程apache身份)

StartServers  8 (预先创建的空闲子进程数)

MinSpareServers 5 (最小空闲进程)

MaxSpareServers 20 (最大空闲进程)

ServerLimit 256 (最大进程数量,)

MaxClients 256 (最大客户端数量,限制最大并发数量链接数)

MaxRequestsPerChild 4000 (每一个进程能请求的最大资源数量)

</IfModule>

<IFModule worker.c> (三级结构,主控进程启动子进程,子进程启用线程提供服务)

StartServers  4  

MaxClients  300 (最大并发链接数(线程))

MinSpareThreads 25 (最少空闲线程数)

MaxSpareThreads 75 (最大空闲线程)

ThreadsPerChild  25   (每一个子进程启动多少线程)

MaxRequestsPerChild 0  

##每个进程启用25个线程 四个进程一共100个线程,最大空闲为75个线程,启动后自动杀掉一个进程,凡人无法理解。

</IfModule>

pv的概念:

(每个网页的资源数量)(平均每个资源的加载时间)(最大并发数量)

 每个页面资源80个  平均每个资源加载需要500ms 并发数量256

pv=256*2(一秒钟加载两个资源)*86400(一天多少秒)/80=55w (每天最大访问次数)Page View

uv:User View (平均每个用户点击网页的次数,有效用户) 

 4.DSO动态加载:在主配置文件段

 LoadModule指令

    LoadModule MOD_NAME modules/MOUDLE_FILES.so

如果是相对路径,则相对于DocumentRoot而言

5.### Section 2: 'Main' server configuration

通常来讲,这两个配置段没有的指令会从主配置段继承配置,主服务器配置和虚拟服务器配置不可同时生效:

(1)'Main'Server配置段(在单台服务器上存在单个站点提供服务)

  定义服务器和主机必不可少的: ServerName FQDN:PORT   主服务器在主配置段里定义也可以(试验中在本机定义后,还要编辑/etc/hosts添加ip地址和FQDN对应关系才能在本机浏览器打开)

                DocumentRoot (路径映射)


6.站点资源访问控制

    (1)基于文件系统 (2.2默认都可以访问 2.4默认不能访问)

    <Directory"/PATH/TO/SOME_DIR"> (针对文件夹做操作,配置内容只对该文件夹有效)

    ...

    </Directory>

    <File""> ...</File>(针对文件,只对容器内生效)

      <FileMatch "PATTERN"> ...</FileMatch>(针对被正则匹配的文件)

    (2)基于url路径              

      <Location "/PATH/TO/SOME_URL">...</Location>(对url访问控制) 

     <LocationMatch "PATTERN">...</LocationMatch> (url的正则表达式)    

  目录中的常用选项:

        

(1) Options:用于定义资源的展示方式;后跟以空白字符分隔的“选项”列表; 

Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None All

Indexes:允许索引;

FollowSymLinks:允许跟踪符号链接; (允许指定的文件或路径是以软连接的形式存在,风险很大)

SymLinksifOwnerMatch          (原理同上,但文件或目录属主(运行httpd的用户)必须是符合要求,相比followsyslinks风险较小)

ExecCGI:允许执行CGI脚本;      (早期CGI可以有超级superID权限,除非网页用到此功能,否则尽量不开启)

         Includes:包含            略

如果一个站点没有主页又没有允许Indexes则显示403,但如果有其他url还是可以访问的.

(2) AllowOverride [none|all|Fileinfo|authconfig|limit](用来控制哪些指令可以放在.htaccess中)

httpd允许在网页文档的各目录下使用.htaccess文件实现单目录资源的访问控制;表示哪此指令可以存放于.htaccess文件中;

     比如/data/web/目录下有.htaccess则编辑此文件则可实现访问控制,如果使用服务器性能急剧下降(必须搜索到此文件.当前目录没有则搜索上级目录)


(3) order和allow/deny from (控制谁能在当前服务器获得资源) 

    基于IP地址的访问控制;

     order 用于定义allow和deny的生效次序;

       allow from all/IP/NETWORK/FQDN

      deny from  all/IP/NETWORK/FQDN 

      来源地址格式:

      IP

      NetAddr:格式;

            172.16;

            172.16.0.0;

            172.16.0.0/16;

            172.16.0.0/255.255.0.0;

      FQDN

      DAMAIN

    order * , *(谁在后谁是默认法则)

        order deny,allow;deny是默认法则,没有说明allow的都是不允许的(安全)

        order allow, deny (如果没有deny的,都是allow(默认))-->>来源请求遵循最佳匹配法则机制;

        oeder allow,deny          #deny为默认法则
        deny from 172.16.100.67      #不允许这个地址
        allow from 172.16         #允许这个网段

    deny和allow的次序是没有区别的(非order第一行),最优匹配法则:当一个主机访问时,看哪一条能最小匹配,哪一个就优先生效(172.16.100.67最小匹配deny,所以deny生效)


        oeder allow,deny          #deny为默认法则
        deny from 172.16.100.67      #不允许这个地址
        allow from 172.16         #允许这个网段
        deny from all #172.16.1.1最小匹配allow from 172.16s所以可以访问

7.定义站点主页面

 DirectoryIndex index.html index.html.var 

可以多个值 自作而有搜索,如果没有查看是否options indexes返回索引列表,如果没有则返回403

8.定义路径别名:

Alias  /URL/  "/PATH/TO/SOME_DIR/" (URL只是个定义.并不一定非要是目录)

    DocumentRoot "/data/web"