httpd(Apache)、httpd-2.2、httpd-2.4

简介:

下面介绍的是http协议基础、http协议的报文格式、httpd(Apache)、httpd-2.2、httpd-2.4。


一、http协议基础 -------------超文本传输协议,无状态,可通过 cookie 机制来进行状态保存。

1、协议版本

 http协议的版本有:http/0.9、http/1.0、http/1.1。

 http/1.0 ---------支持MIME机制,支持Cache机制,Method机制。

 http/1.1 --------强化了缓存、提出了持久连接机制


 http/1.0 的三种机制解释如下:

 MIME机制 ------------多用途互联网邮件扩展

 Cache机制 -----------缓存机制

 Method机制:

    GET --------请求获取相关资源

    POST -------在资源之后附加的数据

    HEAD -------请求资源的相应首部

    PUT --------请求服务器存储一个资源

    DELETE -----请求服务器删除某个资源

    TRACE ------请求服务器回送请求信息,用于故障诊断或检测

    CONNECT ----保留未被使用

    OPTIONS ----查询服务器性能,查询与资源相关的选项和请求资源的需求


 http协议 ------应用层协议,接口 80/tcp

 https协议 -----应用层协议,接口 443/tcp


2、URI -----------统一资源标识符(web上的各种资源都可以用uri来标识)

 URI分为三部分:

    1)、访问资源的命名机制

    2)、存放资源的主机名称

    3)、资源自身的名称

 URL ------------统一资源【定位】符,可以说URL是URI的子集(URI自身存在的机制)。

 URL是互联网上,【描述web资源】的特定格式的一组字符串。

 URL由三部分构成:

    1)、协议 ------表资源的提供方式或访问方式

    2)、主机标识 --------可以是主机名称,也可以是IP地址

    3)、资源路径 --------使用某种特定方式实现的路径映射机制,标识资源的具体位置

 URL的通用格式:scheme://Server[:port]/PATH/TO/SOME_RESOUECE?PARAMETERS=VALUE#FLAGS

    例:http://www.baidu.com/index.html


3、Web资源

 Web上可用的各种资源,如:html文档,图片,视频或音频片段,应用程序等,都可以使用URI来进行标识。客户端发送的一次请求,只能请求一个web资源。

(1)、资源分类

 web资源分为两类:分为静态、动态两种资源。

    静态资源:服务器直接发送给客户端响应的资源。(html文档、图片、流媒体、文本、js)

    动态资源:在服务器上需要服务器按照某种方式执行之后生成相应的页面,再将页面发送给客户端响应的资源。(.php、.jsp、.NET、js)

(2)、资源路径映射 ----------------chroot

 资源服务器的映射方式:DocumentRoot、Alias、vhost docroot、用户自己的docroot                 

 

 html文档 -------------超文本标记语言(查询访问时使用)

 格式:

  <html>

    <head>

      <title>xxxx</title>

      <meta>

    </head>

    <body>


    </body>

  </html>



4、五种并发响应模型(服务器):

(1)、单进程IO模型:只有一个进程,每次只能响应一个用户请求,串行响应。

(2)、多进程IO模型:同时启动多个进程,每个进程可以响应一个用户请求。

(3)、复用的IO模型:一个进程可以响应多个用户请求。

    多线程模型:一个进程可以生产多个线程,每个线程响应一个用户提供请求。

    事件驱动模型:一个进程【直接响应】多个用户请求。

(4)、复用的多进程IO模型:启动多个进程,每个进程再分为多个线程,每个线程响应一个用户提供请求。

(5)、复用的事件驱动IO模型:启动多个进程,每个进程直接响应多个用户请求。


5、web服务器一次完整的http请求的处理过程:

(1)、建立连接 -----三次握手

(2)、接收请求:将客户端发送来的报文解封后放置于服务进程所在的内存空间。

(3)、处理请求:对于接收到的数据报文,进行解析。

(4)、访问资源:通过各种IO方式,获取到用户请求的资源。

(5、)构建响应报文

(6)、发送响应报文

(7)、记录访问日志



6、http请求处理的连接方式:持久连接、短连接

  持久连接:长连接,keepalive。对于持久连接,有时间限制(15秒)和数量限制(100个)

  非持久连接:短连接


7、http协议的实现方式:httpd、nginx、lighttpd。



二、http协议的报文格式 -----------也称为http首部、http头

1、通用格式:

  起始行

  首部

  ...

  主题


2、请求报文首部 -----------request headers

  <Method> <request-URL> <Version>

  <header: > value

  Host: www.qhdlink.com

  <body>


3、响应报文首部 -----------response headers

  <Version> <Status-Code> <reason-phrase>

  <header: > value

  ...

  <body>


4、对于请求、响应报文首部中,各个字段的定义如下:

Method:请求方法,客户端希望服务器执行的操作

  GET ----------服务器到客户端

  HEAD ---------只在乎表头

  POST ---------客户端到服务器


Status-Code --------状态码,三位十进制整数,公有5类。

  主要作用:是标识请求处理过程的结果状态。

  五类:

  1xx:代码为100-101,信息提示

  2xx:200-206,成功类的相应状态码

  3xx:300-305,重定向类相应状态码

    301:永久重定向(响应一个提示信息,提示改变位置)

    302:临时重定向(用于响应新版)

    304:资源未被修改

  4xx:400-415,客户端错误类的响应状态码

    401:认证质询

    403:请求被拒绝(所请求的资源没有权限访问、用户身份错误)

    404:请求的资源不存在

  5xx:500-505,服务器端错误类的响应状态码

    500:服务器内部错误

    502:反向代理和上一级服务器通信失败,或请求超时


reason-phrase ---------状态短语

  如:Forbidden


header ------首部内容

  格式:Name: Value

  首部分类(5种):通用首部、请求首部、响应首部、实体首部、扩展首部

    1)、通用首部:请求报文和响应报文中都可以使用

      Date -------------创建报文的时间

      Connection -------------连接状态(长连接、短连接,即keepalive、closed)

      Via ---------------经由(报文传输过程中经由的代理节点的IP地址)

      Cache-Control ----------------缓存控制机制

    2)、请求首部:

      Accept ----------------可以接受的媒体形式,MIME(多用途互联网邮件扩展)

        媒体格式(MIME格式):Major/Minor ------主类型和次类型

        常用的媒体格式有:text/html、text/plaintext、image/jpeg、image/png、application/X-php

      Accept-Charset ------------可以接受的字符集

        如:ASCII码(单字节码),Linux每个汉字默认3个字节,Windows每个汉字默认2个字节

      Accept-Encoding ----------可以接受的编码格式(byte、gzip、deflate)

      Accept-Language ----------可以接受的语言

      Client-IP --------------可接受的客户端IP地址

      Host -----------请求的服务器名称,也称为主机头

      Referer -----------从哪跳转过来,不是直接键入的

      User-Agent --------------客户端代理程序

      Expect -----------期望到的内容(条件使式请求首部,3个)

          If-Modified-Since --------某时间后是否被修改过

          If-Unmodified-Since -------某时间后是否没被修改过

          If-Match ------本地缓存和服务器ETag是否相同  

    3)、响应首部:消息性首部、安全响应首部

    消息性首部如下:

      Age -----------响应持续的时长;

      Server ----------服务器端软件程序的名称、版本

      Accept-Ranges -------------服务器端请求类型范围,*表所有

      Vary --------------服务器查看的其他首部列表


    安全响应首部如下:

      WWW-Authenticate -----------询问握手

      Set-Cookie ----------为客户端设定Cookie


    4)、实体首部:Allow、Location、Content-Encoding、Content-Language、Content-Location、Content-Type、Content-Length

    Allow --------------请求方法

    Location -------------资源的真正的URL地址

    Content-Location ----------真正实体资源的所在位置


    5)、扩展首部 ---------X开头



三、httpd(Apache)

httpd -----------应用程序(http daemon)

1、版本

 httpd软件的版本:httpd-1.3、httpd-2.0、httpd-2.2、httpd-2.4。常用的是httpd-2.4。


2、httpd特性

 httpd的特性:高度模块化(一个核心+多个模块)。其中,模块分为两类:动态和静态。静态是编译到核心中的功能,如果要更改静态模块,必须更换核心,所以必须重启。


 httpd的功能特性(7个):

(1)、支持CGI(通用网关接口)

(2)、支持虚拟主机的功能:标识虚拟主机----IP+port+主机名

(3)、支持反向代理 ----------相当于代理服务器,可影响内部拓扑结构

       代理(正向代理) --------相当于代理客户

(4)、支持负载均衡 ----------基于流量、基于业务、基于请求(相当于集群)

(5)、可进行路径别名的设置

(6)、支持身份验证机制:basic、digest。

(7)、支持大量的第三方模块

 

3、MPM模块 ---------多道处理模块,是并发响应模型的机制。(3种工作方式)

(1)、prefork(默认):是一种多进程IO模型,有一个主进程和多个子进程,一个进程响应一个请求。其子进程,负责处理和响应请求。

    prefork具有主进程、子进程(子进程,处理请求和响应请求)。

(2)、worker:复用的多进程IO模型(多线程),多进程多线程,一个线程响应一个请求。其子进程,负责管理线程,线程负责处理和响应请求。

    worker具有主进程、子进程、线程(线程,处理请求和响应请求)。

(3)、event:复用的IO模型(事件驱动),其子进程处理和响应请求。

    event具有主进程、子进程(子进程,处理请求和响应请求)。

 

 event模型使用:

 在httpd-2.4中,event为建议使用模型,其前的版本中,event不稳定或没有加载。

    在centos6 中,采用httpd-2.2,所以采用的是event 测试模型,也不支持动态机制的MPM。

    在centos7 中,采用httpd-2.4,采用成熟的event,支持MPM机制。



四、httpd-2.2

1、httpd-2.2中的服务(centos6)

  启动服务 ----------------/etc/rc.d/init.d/httpd

    # /etc/rc.d/init.d/httpd {start|stop|restart|reload|status}

    # service httpd {start|stop|restart|reload|status}

  开机自启:chkconfig [--level 23456] httpd on|off

2、httpd-2.2的程序环境

  配置文件:

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

    /etc/httpd/conf.d/*.conf ----------辅助配置文件

    /etc/httpd/conf.d/magic -----------实现MIME功能(多用途互联网邮件扩展)

    /etc/sysconfig/httpd  -------------httpd服务器【启动脚本】的配置文件

  程序文件:/usr/sbin/httpd

            /usr/sbin/httpd.event

            /usr/sbin/httpd.worker

  日志文件:/var/log/httpd -----包括访问日志和错误日志

  默认站点的文档和目录:/var/www/html

  模块文件的路径:/usr/lib64/httpd/modules -----------存在符号链接文件/etc/httpd/modules


3、httpd-2.2与centos7的httpd-2.4比较:

  启动服务:/usr/lib/systemd/system/httpd.service

    # systemctl {start|stop|restart|reload|status} httpd[.service]

  开机自启:

    # systemctl enable|disable httpd.service

    在httpd2.4中,支持静态模块,每个MPM模型对应一个模块。

  配置文件:(多了一种)

    /etc/httpd/conf.modules.d -------------额外的模块专用的配置文件


  程序文件(二进制文件):---------------/usr/sbin/httpd

    /usr/lib64/httpd/modules/mod_mpm_event.so

    /usr/lib64/httpd/modules/mod_mpm_prefork.so

    /usr/lib64/httpd/modules/mod_mpm_worker.so

    /usr/sbin/apachectl -------------------服务控制命令


4、安装httpd --------------------httpd、httpd-tools、httpd-devel、httpd-manual

 安装httpd的两种方式如下:

   1)、rpm包 -----本地光盘yum源中

   2)、编译安装 ------定制新功能,为了安全,可去除带有漏洞后门的模块

 安装的httpd拥有的四个包:主程序包、httpd的工具包、httpd的开发包、离线帮助文档。

  # yum list all httpd*


httpd2.2的主配置文件:-------------------/etc/httpd/conf/httpd.conf

 在此配置文件中,所有的配置选项都被称为选项,指令格式为:directive value(驼峰式)。在修改了配置文件中的指令后,可以使用reload使之生效。在httpd2.2 中,如果【更改了监听的IP地址,则必须重启服务】。在主配置文件中,所有的指令被分别写到三个配置部分中


下面是修改配置文件中的指令:(16类)

(1)、修改监听的地址和端口

  格式:Listen [IP:]PORT

  注意:listen指令可以定义多次,如果省略了IP地址,即 0.0.0.0,意味着httpd服务进程将监听服务器上配置的所有IP地址。


(2)、持久连接的特性(3个)------------KeepAlive

  持久连接,就是当服务器和客户端已经建立其tcp连接之后,在完成一次请求之后,连接不断开,而是等待其他用户发送请求。

  断开条件:数量限制、时间限制。

  相关指令:KeepAlive Off|On  ------------------持久连接开启或关闭

            MaxKeepAliveRequests 100  ----------------最多持久连接数

            KeepAliveTimeout 15  --------------持久连接的时间,默认单位为秒

            # httpd -t -----------------测试语法结构的对错

  请求测试:

    # telnet SERV_IP SERV_PORT

    GET /PATH/TO/RESOURCE HTTP/1.1

    Host: SERV_IP

    例:# telnet 172.16.67.1 80 ------------进入Telnet模式,进行请求输入。

        > GET html HTTP/1.1

        > Host: 172.16.67.1 -------------两次回车载入


(3)、MPM ------------多道处理模块

  httpd-2.2的MPM不支持DSO机制,并且event为测试模式。

  # httpd -M -----------列出所有支持模块,包括静态和共享模块

  # httpd -l -----------查看静态编译的模块


  三个配置文件:/usr/sbin/httpd、/usr/sbin/httpd.event、/usr/sbin/httpd.worker。

  与prefork相关的配置指令:(子进程)

    <IfModule prefork.c>

    StartServers       8  -------------在服务刚启动时,预先fork几个子进程

    MinSpareServers    5  --------------最小预留的空闲子进程的数量

    MaxSpareServers   20  -------------最多预留的空闲子进程的数量

    ServerLimit      256  --------------为MaxClients指定的最大值

    MaxClients       256  ----------------最大的并发访问量

    MaxRequestsPerChild  4000  -------------------每个子进程处理的最大请求数量

    </IfModule>


  与worker相关的配置指令:(线程)

    <IfModule worker.c>

    StartServers         4  -------------------在服务刚启动时,预先fork几个子进程

    MaxClients         300  ------------------并行访问的上限

    MinSpareThreads     25  -------------------最小预留的空闲线程数量

    MaxSpareThreads     75  -----------------最大预留的空闲线程数量

    ThreadsPerChild     25  -----------------每个进程管理的最大线程数量

    MaxRequestsPerChild  0  ------------------每个子进程处理的最大请求数量

    </IfModule>


(4)、DSO机制 -----------LoadModule

  modules,即/etc/httpd/modules。


(5)、"Main" Server -----------定义主机的基本指令

  格式:ServerName FQDN[:PORT]

        DocumentRoot "/var/www/html"

  配置:

  http://172.16.69.1/test.html ----------路径映射

  DocumentRoot "/myweb/data"


  例:配置了配置文件后,进行以下操作:

    # mkdir -pv /myweb/data

    # vim /myweb/data/index.html

    重载配置文件

    客户端访问到http://172.16.69.1/index.html


(6)、站点资源的访问控制

  1)、基于文件系统的访问控制:分为三类,分别为:基于【指定目录】的访问控制、基于【特定文件】的访问控制、基于【模式匹配】进行文件的访问控制。

    基于【指定目录】的访问控制,格式如下:

    <Directory "/PATH/TO/SOME_DIR">

      Directive Value

    </Directory>


    基于【特定文件】的访问控制,格式如下:

    <File "/PATH/TO/SOME_FILE">

      Directive Value

    </File>


    基于【模式匹配】进行文件的访问控制,格式如下:

    <FileMatch "PATTERN">

      Directive Value

    </FileMatch>


  2)、基于URL路径进行访问控制:分为两类,分别为:基于【URL】进行、基于【模式匹配】进行URL路径访问。

    基于URL进行,格式如下:

    <Location "/PATH/TO/SOME_URL">

      Directive Value

    </Location>


    基于模式匹配进行URL路径访问,格式如下:

    <LocationMatch "URL_PATTERN">

      Directive Value

    </LocationMatch>


  3)、常用的目录中的访问控制指令有:各种options指令、AllowOverride指令。

  Options指令:

    Indexes ---------允许索引(一般用于资源下载站点),对于正常的Web站点来说,应禁用此功能。

    FollowSymLinks -------跟踪符号链接

    SymLinksifOwnerMatch -------------只有当子进程的所有者和链接文件的所有者为同一用户时,才跟踪符号链接

    ExecCGI ---------允许执行CGI脚本

  

  AllowOverride指令:-----------------控制那些允许放置于 .htaccess 文件中的指令,具有继承特性。该指令的值设置为None

    .htaccess的三个配置文件:/myweb/data/.htaccess /myweb/data/images/.htaccess /myweb/data/admin/.htaccess

  

  Order指令、Allow指令、Deny指令:

    Order指令 ----------定义基于IP地址的访问控制,规定了访问控制的检查顺序,allow,deny 和 deny,allow 访问结果不同。


(7)、web站点主页文件的定义

  当用户给出的URL中,【没有明确指明资源的具体名称】时,此处会根据此处的文件名去依次匹配,先后顺序优先。

  例:

  DirectoryIndex index.html in.html index.html.var


(8)、定义路径别名

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

  在Alias指令格式中,URL右侧的"/"相当于后面的路由右侧的"/",他们是匹配的。


(9)、日志功能:错误日志、访问日志。

  访问日志的各选项解释:

  %h -----------客户端的IP地址

  %l ------------登录名,没有则为"-"

  %s ------------状态信息

  %b ------------资源大小


(10)、离线帮助手册 ---------------配置文件:/etc/httpd/conf.d/manual.conf(重载之后生效)

  # yum -y install httpd-manual


(11)、基于用户的访问控制

  httpd的认证功能:(2种)

    认证质询机制(响应报文的状态码为 401)-----------需进行身份验证,先拒绝访问,进行登录

    认证 -------客户端填写账户和密码,登录后之后,发送报文

  httpd的认证方式:(2种)

    basic认证 ---------明文认证

    digest认证 --------消息摘要认证

  

  虚拟用户账号 ----------该账号无法进行系统级认证,只能用于访问服务器上某特定服务的账户

  一般来讲,虚拟用户时存放于某特定的数据格式中,如:文本文件、SQL数据库(写效率高)、LDAP目录数据库(读效率高)

  安全域 ------需要通过用户认证才能访问资源


  htpasswd命令 ---------------------创建用户/组文件

  常用选项:

  -c 创建用户账户文件(只用于创建第一个,建第二个用户以后的账户不要用-c)

  -m 使用md5加密用户密码

  -s 使用sha加密用户密码

  -D 删除用户


  例:basic认证的配置(定义安全域、创建用户/组文件)

    1)、定义安全域 

    <Directory "/PATH/TO/SOME_DIR"> ------------基于【虚拟用户】做身份验证

      Options None

      AllowOverride None

      Authtype basic

      AuthName "SOME_STRING"

      AuthUserFile "/PATH/TO/HTTP_USER_FILE"

      Require user user1 user2 ...

    </Directory>

    

    <Directory "/PATH/TO/SOME_DIR"> ----------基于【虚拟组】做身份验证

      Options None

      AllowOverride None

      Authtype basic

      AuthName "SOME_STRING"

      AuthUserFile "/PATH/TO/HTTP_USER_FILE"

      AuthGroupFile "/PATH/TO/HTTP_GROUP_FILE"

      Require group group1 group2 ...

    </Directory>


    2)、创建用户/组的文件(htpasswd命令) 

    格式:GROUP_NAME: user1 user2 ...


(12)、系统状态数据查询:server-status

  # httpd -M | grep status

  ExtendedStatus On|Off -----------开启或关闭更多的额外系统状态信息

  例:

  <Location /server-status>

    SetHandler server-status

    Order deny,allow

    Deny from all

    Allow from 172.16

  </Location>


(13)、虚拟主机

  对于每个web站点,都有一个属于其独立的标识。Main Server 和虚拟主机不能同时使用。两个都有的话,Main Server失效,虚拟主机有效。

  站点标识:IP地址、PORT、主机头(FQDN)

  三种典型的虚拟主机实现方式:

    1)、基于IP地址的虚拟主机 -----每个虚拟主机使用一个独立的IP地址

    2)、基于PORT端口的虚拟主机 -------每个虚拟主机使用一个端口

    3)、基于主机头的虚拟主机 ----------每个虚拟主机使用一个独有的FQDN


  虚拟主机的配置方法:------------在 ./conf.d/ 下进行主机配置

  <VirtualHost IP:80>

    DocumentRoot /www/docs/dummy-host.example.com

    ServerName dummy-host.example.com

  </VirtualHost>

  vhosts-www1.conf


  基于IP地址的配置示例:(2台虚拟主机)---------------vim /etc/httpd/conf.d/vhost-www1.conf

  # vim /etc/httpd/conf.d/vhost-www1.conf

  # vim /etc/httpd/conf.d/vhost-www2.conf

  /etc/httpd/conf.d/vhosts-www1.conf

    <VirtualHost 172.16.69.1:80>

      DocumentRoot "/myweb/vhosts/www1"

      ServerName www1.qhdlink.com

    </VirtualHost>


  /etc/httpd/conf.d/vhosts-www2.conf

    <VirtualHost 172.16.69.2:80>

      DocumentRoot "/myweb/vhosts/www2"

      ServerName www2.qhdlink.com

    </VirtualHost>

 

  基于端口的配置示例:------------/etc/httpd/conf.d/vhosts-www3.conf

  注意基于端口配置的时候,要指明端口号,不然和没指明的时候一样,不是端口的配置。进行端口配置的前提,是需要让httpd事先监听于指定的额外端口,即Listen PORT。

  /etc/httpd/conf.d/vhosts-www3.conf

  Listen 60080

  <VirtualHost 172.16.69.1:60080>

    DocumentRoot "/myweb/vhosts/www3"

    ServerName www3.qhdlink.com

  </VirtualHost>

 

  基于FQDN的虚拟主机配置示例:----------------------/etc/httpd/conf.d/vhosts-www4.conf

  主机名成为关键,IP和端口号都可以和前面一致。

  # httpd -t ------检验语法

  /etc/httpd/conf.d/vhosts-www4.conf

  NameVirtualHost 172.16.69.1:80

  <VirtualHost 172.16.69.1:80>

    DocumentRoot "/myweb/vhosts/www4"

    ServerName www4.qhdlink.com

  </VirtualHost>


(14)、https的实现 ------------SSL会话是基于IP地址所创建的,【单IP地址】的主机上,仅可以创建一个https虚拟主机。

  1)、为httpd生成私钥并签发证书,步骤如下:

    1).生成私钥及证书请求

    # mkdir /etc/httpd/ssl

    # cd /etc/httpd/ssl

    # (umask 077; openssl genrsa -out httpd.key 2048)

    # openssl req -new -key httpd.key -out httpd.csr -days 3653

    # scp httpd.csr 172.16.72.1:/tmp

    2).在CA上签发证书

    CA]# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt -days 3653

    CA]# scp certs/httpd.crt 172.16.69.1:/etc/httpd/ssl

    3).在httpd服务器上清除证书请求文件

    # rm -f httpd.csr


  2)、配置httpd -------------------支持使用SSL,确定已装载mod_ssl模块

  # yum -y install mod_ssl

  修改配置文件,修改公钥和私钥的安装位置。

  例:

  /usr/lib64/httpd/modules/mod_ssl.so

  /etc/httpd/conf.d/ssl.conf

  <VirtualHost 172.16.69.1:443>

    DocumentRoot "/myweb/vhosts/ssl"

    ServerName www.qhdlink.com

    SSLCertificateFile /etc/httpd/ssl/httpd.crt

    SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

  </VirtualHost>


(15)、user/group ------------指定以哪个用户的身份运行httpd服务进程

  格式:

  User apache

  Group apache

      

(16)、mod_deflate模块 -----------------压缩页面,优化传输速度

  SetOutputFilter DEFLATE

  

  AddOutputFilterByType DEFLATE text/plain ------------多互联网邮件扩展类型

  AddOutputFilterByType DEFLATE text/html

  AddOutputFilterByType DEFLATE application/xhtml+xml

  AddOutputFilterByType DEFLATE text/xml

  AddOutputFilterByType DEFLATE application/xml

  AddOutputFilterByType DEFLATE application/x-javascript

  AddOutputFilterByType DEFLATE text/javascript

  AddOutputFilterByType DEFLATE text/css

     

  DeflateCompressionLevel 9 ----------------压缩级别,1~9,9最高

  BrowserMatch ^Mozilla/4  gzip-only-text/html ------------浏览器

  BrowserMatch  ^Mozilla/4\.0[678]  no-gzip

  BrowserMatch \bMSI[E]  !no-gzip !gzip-only-text/html



五、httpd-2.4

1、httpd-2.4具有特性如下:(10个)

(1)、MPM支持DSO机制,以模块方式加载和卸载

(2)、event MPM 稳定,生产可用

(3)、支持异步IO机制,使得并发传输性能提高

(4)、支持没模块及每目录单独日志级别定义

(5)、每请求相关的专用配置

(6)、增强版的表达式分析器

(7)、毫秒级的keepalive超时时长

(8)、基于FQDN的虚拟主机无需使用NameVirtualHost指令

(9)、支持用户自定义变量

(10)、更低的内在开销

2、httpd-2.4的新模块(3个):

  mod_proxy_fcgi

  mod_proxy_scgi

  mod_remoteip

  

3、安装httpd-2.4 ---------centos6中需编译安装。

  # yum install httpd

 httpd的配置环境:主配置文件、模块的配置文件、片段配置文件。

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

  模块配置文件 -------------/etc/httpd/conf.modules.d/*.conf

  片段配置文件 -------------/etc/httdp/conf.d/*.conf


4、httpd-2.4配置特点(特有):

(1)、切换MPM -----------三个模块只能有一个生效,不能让多个MPM同时生效

  编辑:/etc/httpd/conf.modules.d/00-mpm.conf

      LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

      LoadModule mpm_worker_module modules/mod_mpm_worker.so

      LoadModule mpm_event_module modules/mod_mpm_event.so

(2)、基于IP地址的访问控制

  不再支持Allow、Deny这样的指令,改用Require指令完成访问控制功能。

  注意:【默认】情况下,httpd-2.4拒绝所有主机访问。如果拒绝和允许同时要控制,则所有Require必须放在RequireAny容器中。

  【允许和拒绝】同时要控制,则所有Require指令必须放在RequireAny容器中,具体解释如下:

  <RequireAny>

    Require all denied

    Require ip 172.16.69.1

  </RequireAny>


  <RequireAny>

    Require all granted

    Require not ip 172.16.69.1

  </RequireAny>


  <RequireAny>

    Require all denied

    Require host qhdlink.com

  </RequireAny>


(3)、虚拟主机

  即便使用基于FQDN方式构建的虚拟主机,也无需再使用NameVirtualHost指令。

  <VirtualHost 172.16.72.1:80>

    DocumentRoot "/myweb/vhosts/www"

    ServerName www.qhdlink.com

    <Directory "/myweb/vhosts/www"

      Options None

      AllowOverride None

      Require all granted

    </Directory>

  <VirtualHost>


(4)、毫秒级的keepalive持久连接 ----------单独创建文件/etc/httpd/conf.d/keepalive.conf

   /etc/httpd/conf.d/keepalive.conf

   KeepAlive On

   KeepAliveTimeout 500ms --------------支持写为 500ms

   MaxKeepAliveRequests 100


  CentOS 7:httpd-2.4

    启动服务:Systemd Unit文件,/usr/lib/systemd/system/httpd.service

      systemctl {start|stop|restart|reload|status} httpd[.service]


    开机自动启动或停止服务:

      systemctl enable|disable httpd.service


5、httpd-2.4的程序环境

  启动服务:/usr/lib/systemd/system/httpd.service

    # systemctl {start|stop|restart|reload|status} httpd[.service]

  开机自启:

    # systemctl enable|disable httpd.service

    在httpd2.4中,支持静态模块,每个MPM模型对应一个模块。

  配置文件:(多了一种)

    /etc/httpd/conf.modules.d -------------额外的模块专用的配置文件

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

    /etc/httpd/conf.d/*.conf ----------辅助配置文件

    /etc/httpd/conf.d/magic -----------实现MIME功能(多用途互联网邮件扩展)

    /etc/sysconfig/httpd  -------------httpd服务器【启动脚本】的配置文件

  程序文件(二进制文件):---------------/usr/sbin/httpd

    /usr/lib64/httpd/modules/mod_mpm_event.so

    /usr/lib64/httpd/modules/mod_mpm_prefork.so

    /usr/lib64/httpd/modules/mod_mpm_worker.so

    /usr/sbin/apachectl -------------------服务控制命令

  日志文件:/var/log/httpd -----包括访问日志和错误日志

  默认站点的文档和目录:/var/www/html

  模块文件的路径:/usr/lib64/httpd/modules -----------存在符号链接文件/etc/httpd/modules


6、curl命令 ------------文件传输工具

  格式:curl  [options]  [URL...]

  常用选项:

  -A <string> ---------------设置用户代理发送给服务器

  --basic ------------------使用HTTP基本认证

  --tcp-nodelay ----------------使用TCP_NODELAY选项

  -e <URL> ------------------来源网址

  --cacert <file> ------------CA证书 (SSL)

  --compressed --------------要求返回的压缩格式

  -H <line> ---------------自定义首部信息传递给服务器

  -I ----------------------只显示响应报文首部信息

  --limit-rate <rate> --------------设置传输速度

  -u <user[:password]> ------------设置服务器的用户和密码

  -0 -------------使用http/1.0 


7、elinks命令

  格式:elinks  [OPTION]... [URL]...

  常用选项:

  -dump ------------------------直接将URL的内容输出至标准输出 


8、ab命令 ------------压力测试工具

  常用选项:

  -c -------------并发连接数

  -n -------------请求总数

  -k -------------使用keepalive





     本文转自little_ding 51CTO博客,原文链接:http://blog.51cto.com/12496428/1966692,如需转载请自行联系原作者





相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
4月前
|
Linux 网络安全 Apache
Centos下操作Apache httpd
Centos下操作Apache httpd
70 0
|
人工智能 网络协议 安全
Apache(httpd)的简介、安装以及如何使用(上)
Apache(httpd)的简介、安装以及如何使用(上)
461 0
Apache(httpd)的简介、安装以及如何使用(上)
|
1月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
30 0
|
7月前
|
缓存 网络协议 PHP
httpd和apache
httpd和apache
41 0
|
关系型数据库 MySQL 应用服务中间件
在Centos7上将Apache(httpd)切换为Nginx的过程记录
近期要上线几个基于tornado+motor的移动端接口服务,众所周知,Apache和tornado天生八字不合,尤其apache对python3尤为的不友好,tornado和nginx才是木石前盟,另外由于apache目前系统占用确实比较高,不光进程数多,httpd竟然占用了200多M,太庞大,决定换为较轻量级,高并发的nginx。
在Centos7上将Apache(httpd)切换为Nginx的过程记录
|
安全 Apache
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
影响版本 Apache 2.4.49 Apache 2.4.50 当前描述 发现Apache HTTP Server 2.4.50中对CVE-221-41773的修复不足。攻击者可以使用路径遍历攻击将URL映射到Alias类指令配置的目录之外的文件。如果这些目录之外的文件不受通常默认配置“要求全部拒绝”的保护,这些请求可能会成功。如果还为这些别名路径启用了CGI脚本,这可能允许远程代码执行。此问题仅影响Apache 2.4.49和Apache 2.4.50,而不影响早期版本。 环境搭建可以查看我的上一篇文章 https://developer.aliyun.com/article/11136
299 0
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
|
网络协议 安全 Apache
Apache(httpd)的简介、安装以及如何使用(下)
Apache(httpd)的简介、安装以及如何使用(下)
217 0
Apache(httpd)的简介、安装以及如何使用(下)
|
安全 网络协议 算法
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
212 0
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
|
安全 网络协议 网络安全
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除
189 0
RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除

热门文章

最新文章

推荐镜像

更多