httpd

httpd

httpd服务是由apache 推出的一款web service ,它是一款后台运行的服务程序,有几种工作模式供用户访问使用,功能强大。

首先我们来讲讲httpd服务的协议http

  • http: hyper text transfer protocol 超文本传输协议
    • http协议版本:

      • HTTP / 0.9 : 早期版本,原型版本 (早期只能传输文本)
      • HTTP / 1.0 : 第一广泛使用的版本,支持MIME
        • MIME: Multipurpose Internet Mail Extesion 多用途网络邮件扩展 (就因为1.0增加了这项功能,后期HTTP协议可以做很多事情)
      • HTTP / 1.1 : 增强了缓存功能 (现在做用的版本)
      • HTTP / 2.0 : 下一阶段版本
    • 常用端口信息:

      • TCP 协议的 : 80 8080 (http 默认是80端口 httpds 默认是 443)
    • URI: Uniform Resource Identifier 统一资源标识符

    • http 工作请求过程

这里写图片描述

  1. 建立连接(接收、拒绝请求)
  2. 接收请求
  3. 处理请求
  4. 访问资源
  5. 构建响应
  6. 发送响应
  7. 记录日志
httpd—-apache 的web services

特性:
高度模块化: 核心 core + 模块 modules
DSO : Dynamic Shared Object 动态共享对象
MPM:multi processing modules 多路进程模块

MPM的多路进程模块有三种:

prefork: 多进程模型,每个进程响应一个请求
    工作模式: 一个主进程负责生成N个子进程,每个子进程处理一个用户请求,当无用户访问时,也会预留空闲进程等待用户连接

worker: 多进程多线程模型,一个进程生成N个线程,一个线程响应一个请求,也有预留空闲线程的特性

event :多进程多线程模型,工作模式大致和worker相同,只是增加了一个监听的子线程来管理keep-alive类型的线程当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力
httpd的配置
  1. 配置内有一项是监听的IP和端口项
    Listen 80 如果没有指定IP的话代表监听所有IP地址的80端口.

  2. keep-alive 持久连接项,连接建立后,每个资源获取完成后不会断开,而是继续等待其它请求
    KeepAlive Off 持久连接
    MaxKeepAliveRequests 100 持久连接的最大请求数
    KeepAliveTimeout 15 执久连接的超时时间
    建意: 使用较短的持久连接时间

  3. MPM 多路处理模块
    perfork(默认模块)

    95 # prefork MPM
    96 # StartServers: number of server processes to start
    97 # MinSpareServers: minimum number of server processes which are kept spare
    98 # MaxSpareServers: maximum number of server processes which are kept spare
    99 # ServerLimit: maximum value for MaxClients for the lifetime of the server
    100 # MaxClients: maximum number of server processes allowed to start
    101 # MaxRequestsPerChild: maximum number of requests a server process serves
    102 <IfModule prefork.c>
    103 StartServers       8       服务器启动时服务启动的进程数
    104 MinSpareServers    5   最小空闲进程数
    105 MaxSpareServers   20 最大空闲进程数
    106 ServerLimit      256     为maxclients准备的进程数量最大值
    107 MaxClients       256     最大进程数量
    108 MaxRequestsPerChild  4000   一个服务器进程最多响应多少次的请求数
    109 </IfModule>

    worker

    111 # worker MPM
    112 # StartServers: initial number of server processes to start
    113 # MaxClients: maximum number of simultaneous client connections
    114 # MinSpareThreads: minimum number of worker threads which are kept spare
    115 # MaxSpareThreads: maximum number of worker threads which are kept spare
    116 # ThreadsPerChild: constant number of worker threads in each server process
    117 # MaxRequestsPerChild: maximum number of requests a server process serves
    118 <IfModule worker.c>
    119 StartServers         4        服务器启动时启动多少个进程
    120 MaxClients         300      服务器端最大启动的线程数量
    121 MinSpareThreads     25  最小空闲线程数
    122 MaxSpareThreads     75  最大空闲线程数
    123 ThreadsPerChild     25     每个进程所能启进的线程
    124 MaxRequestsPerChild  0 每个线程所响应的最大请求数量 (0表示无限制)  

    event 2.2的httpd event版本还不成熟 , 2.4的版本直接开发成模块了,不在配置文件内

  4. DSO动态共享对象
    配置指令实现模块加载
    —- LoadModule 模块名称——模块路径 (路径可省略)
    /etc/httpd/modules 是系统带有的模块,httpd -M可以查到当前使用的模块

    150 LoadModule auth_basic_module modules/mod_auth_basic.so
    151 LoadModule auth_digest_module modules/mod_auth_digest.so
    152 LoadModule authn_file_module modules/mod_authn_file.so
    153 LoadModule authn_alias_module modules/mod_authn_alias.so
    154 LoadModule authn_anon_module modules/mod_authn_anon.so
    155 LoadModule authn_dbm_module modules/mod_authn_dbm.so
    156 LoadModule authn_default_module modules/mod_authn_default.so
    157 LoadModule authz_host_module modules/mod_authz_host.so
    158 LoadModule authz_user_module modules/mod_authz_user.so
    159 LoadModule authz_owner_module modules/mod_authz_owner.so
    160 LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
    161 LoadModule authz_dbm_module modules/mod_authz_dbm.so
    162 LoadModule authz_default_module modules/mod_authz_default.so
    163 LoadModule ldap_module modules/mod_ldap.so
    164 LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    165 LoadModule include_module modules/mod_include.so
    166 LoadModule log_config_module modules/mod_log_config.so
    167 LoadModule logio_module modules/mod_logio.so
    168 LoadModule env_module modules/mod_env.so
    169 LoadModule ext_filter_module modules/mod_ext_filter.so
    170 LoadModule mime_magic_module modules/mod_mime_magic.so
    171 LoadModule expires_module modules/mod_expires.so
    172 LoadModule deflate_module modules/mod_deflate.so
    173 LoadModule headers_module modules/mod_headers.so
    174 LoadModule usertrack_module modules/mod_usertrack.so
    175 LoadModule setenvif_module modules/mod_setenvif.so
    176 LoadModule mime_module modules/mod_mime.so
    177 LoadModule dav_module modules/mod_dav.so
    178 LoadModule status_module modules/mod_status.so
    179 LoadModule autoindex_module modules/mod_autoindex.so
    180 LoadModule info_module modules/mod_info.so
    181 LoadModule dav_fs_module modules/mod_dav_fs.so
    182 LoadModule vhost_alias_module modules/mod_vhost_alias.so
    183 LoadModule negotiation_module modules/mod_negotiation.so
    184 LoadModule dir_module modules/mod_dir.so
    185 LoadModule actions_module modules/mod_actions.so
    186 LoadModule speling_module modules/mod_speling.so
    187 LoadModule userdir_module modules/mod_userdir.so
    188 LoadModule alias_module modules/mod_alias.so
    189 LoadModule substitute_module modules/mod_substitute.so
    190 LoadModule rewrite_module modules/mod_rewrite.so
    191 LoadModule proxy_module modules/mod_proxy.so
    192 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    193 LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
    194 LoadModule proxy_http_module modules/mod_proxy_http.so
    195 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    196 LoadModule proxy_connect_module modules/mod_proxy_connect.so
    197 LoadModule cache_module modules/mod_cache.so
    198 LoadModule suexec_module modules/mod_suexec.so
    199 LoadModule disk_cache_module modules/mod_disk_cache.so
    200 LoadModule cgi_module modules/mod_cgi.so
    201 LoadModule version_module modules/mod_version.so
  5. 定义“Main”server的文档默认路径,定义网站的根路径
    DocumentRoot”/var/www/html” —- 这是httpd默认的路径,可以手动自己更改

  6. 站点访问控制
    可基于两种类型的路径指明对哪些资源进行访问控制

    • 文件系统路径
      < Directory “/path”>
      ….
      < /Directory>

      < File “/path/file”>
      ….
      < /File>

      < FileMatch “PATTENR”>
      ….
      < /FileMatch >

    • URL路径:
      < Location “”>
      ….
      < /Location>

      < LocationMatch “PATTENR”>
      ….
      < /LlocationMatch>

    < FilesMatch “.(gif|jpe?g|png)$”>
    < Files “?at.*”> 通配符
    < Location /status>
    < LocationMatch “/(extra|special)/data”>

  7. Directory 中基于来源地址实现访问控制

    • options
      < Directory /var/www/html>
      options 所有可用特性: Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGIMultiViews None , All
      < /Directory>

    • AllowOverride
      与访问控制相关的哪些指令可以放在指定目录下的
      .htaccess(由AccessFileName指定)文件中,覆盖之前的
      配置指令
      < Directory “/var/www/html”>
      AllowOverride All: 所有指令都有效
      AllowOverride None: .htaccess 文件无效
      AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖
      < /Directory >

    • 基于来源地址的访问控制
      < Directory “/var/www/html”>
      Order allow,deny
      Order deny,allow
      deny from IP | IP/NETMASK | IP地址网络位
      allow from IP | IP/NETMASK | IP地址网络位

  8. 定义默认主页面:
    DirectoryIndex index.html index.html.var 在配置文档里这项是主义默认的主页面

  9. 日志设定

    • 错误日志:
      ErrorLog logs/error_log 指向是 /var/log/httpd

    • 访问日志:
      CustomLog logs/access_log combined
      498 LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
      499 LogFormat “%h %l %u %t \”%r\” %>s %b” common
      500 LogFormat “%{Referer}i -> %U” referer
      501 LogFormat “%{User-agent}i” agent

    • %h: 客户端IP地址
      %l : Remote logname -表示为空
      %u: Remote user, 用户认证账号,一般情况下不用 -表示为空
      %t : Time the request was received 服务器收到请求的时间
      %r : First line of request , 请求报文的首行信息(method url version)
      %>s:响应状态码
      %b : 响应报文的大小,单位是字节,不包括响应报文首部
      %{Referer}I :请求报文当中“referer”首部的值 当前页面的访问入口,从哪个页面
      中的超链接跳转而来
      %{User-Agent}i:请求报文当中”User-Agent”首部的值:即发出请求用到的应用程序

    详情参考官方文档:http://httpd.apache.org/docs

  10. 路径别名 Alias

    DocumentRoot "/var/www/html"
      Alias /URL/ "/PATH/TO/SOMEDIR"
      Alias /bbs/ "/bbs/htdocs"
      http://www.qq.com/bbs/index.html
      -->/forum/htdocs/bbs
    
  11. 设定默认字符集
    AddDefaultCharset UTF-8

    GBK , GB2312 , GB18030 (国标)

  12. 基于用户的访问控制
    第一步,认证质询: www-Authenticate 响应码为401,先拒绝客户端请求,并说明要求
    客户提供账号和密码
    第二步,客户认证:Authorization:客户端用户填入账号和密码后再次发送请求报文,认
    证通过,则服务器发送响应的资源
    认证类型:
    basic:明文认证方案
    digest:消息摘要认证方案
    安全域:需要用户认证后方能访问的路径
    应该通过名称对其进行标识,并用于告知用户认证的原因
    用户的账号和密码存储于何处
    虚拟账号:仅用于访问某服务时用到的认证标识
    存储:
    文本文件
    SQL数据库
    ladp
    nis
    basic认证:

    ( 1 ) 定义安全域
          < Directory "">
           Options None
           AllowOverride None
           AuthType Basic
           AuthName "STRING"
           AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
           AuthGroupFile"/PATH/TO/HTTPD_GROUP_FILE"
           Require user username1 username2 …
           </Directory>
           允许账号文件中的所有用户登录访问
            Require Valid-user      
           要提供:用户账号文件和组文件;
           组文件:每一行定义一个组
            GRP_NAME : user 1 user 2 user 3 ….  
    基于用户 : <Directory"/www/htdocs/admin">
               Options None
               AllowOverride None
               AuthType Basic
               AuthName "Administator Private"
               AuthUserFile "/etc/httpd/conf.d/htpasswd"                             
               Require valid-user
              </Directory>
    (2)提供账号和密码存储(文本文件)
               使用htpasswd命令进程管理
               htpasswd [ options ] passwordfile username
               -c  :自动创建passwordfile,因此,仅应该在添加第一个用户时使用;
               -m  :md5加密用户密码
               -s  :sha1加密用户密码:
               -D  : 删除指定用户
    
    
    基于用户 : <Directory"/www/htdocs/admin">
                 Options None
                 AllowOverride None
                 AuthType Basic
                 AuthName "Administator Private"
                 AuthUserFile "/etc/httpd/conf.d/htpasswd"  
                 AuthGroupFile"/etc/httpd/conf.d/.htgroup"  
                 (事先创建好这个目录文件/etc/httpd/conf.d/htgroup  文件内容
                 webadmin tom jerry 
                 组名 ,  组用户 或多个组用户… )                              
                 Require group webadmin 
              </Directory>
    

    13.虚拟主机
    有三种实现方案:
    基于IP:
    为每个虚拟主机准备至少一个IP地址
    基于port
    为每个虚拟主机准备至少一个专用port: 实践中很少使用 基于port进行虚拟主机listen 端口得打开对应的端口
    基于hostname:
    为每个虚拟主机准备至少一个专用hostname
    可混合使用上述三种方式中任意方式
    注意:一般虚拟主机莫与中心主机混用,所以要使用虚拟主机先禁用中心主机
    禁用中心主机:注释DocumentRoot
    每个虚拟订机都有专用配置:
    < VirtualHost “IP:PORT”>
    serverName
    DocumentRoot “”
    < /VirtualHost>
    serverAlias : 虚拟主机的别名
    ErrorLog
    CustomLog
    < Directory “”>
    < /Directory>

    示例1:基于Ip  (示例操作之前提前创建好网站的目录 mkdir /vhosts/{web1,web2,web3,web4}/htdocs)
          <VirtualHost 172.16.100.6:80>
           serverName web1.qq.com
           DocumentRoot "/vhosts/web1/htdocs"
          </VirtualHost>   
    
          <VirtualHost 172.16.100.7:80>
           serverName web2.qq.com
           DocumentRoot "/vhosts/web2/htdocs"
          </VirtualHost> 
    示例2:基于port                           
          <VirtualHost 172.16.100.7:8080>
           serverName web2.qq.com
           DocumentRoot "/vhosts/web3/htdocs"
           </VirtualHost> 
    示例3:基于hostname
    
          <VirtualHost 172.16.100.6:80>
           serverName web1.qq.com
           DocumentRoot "/vhosts/web1/htdocs"
          </VirtualHost>   
    
          <VirtualHost 172.16.100.6:80>
           serverName web2.qq.com
           DocumentRoot "/vhosts/web2/htdocs"
          </VirtualHost>              
    
          <VirtualHost 172.16.100.6:80>
           serverName web3.qq.com
           DocumentRoot "/vhosts/web2/htdocs"
          </VirtualHost> 
          NameVirtualHost 172.16.100.6:80  这个示例需要DNS解析
    

    14.使用mod_deflate模块压缩页面优化传输速度
    适用场景:
    (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
    (2) 压缩适于压缩的资源,例如文本文件

            LoadModule deflate_module modules/mod_deflate.so
            SetOutputFilter DEFLATE
            # Restrict compression to these MIME types
            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 
    

#
http事务:
请求: request
响应: response
报文:

      request 报文     
      < method>< request-URL>< version>
      < headers>\r \n ,\r \n

      <entity-body>


      response报文
      <version><status><reason-phrase>
      <headers>\r\n , \r\n

      <entity-boby>

    Method:请求方法,标明客户端希望服务器对资源执行的动作
               GET、HEAD、POST
                   GET:  从服务器获取一个资源;
                   HEAD: 只从服务器获取文档的响应首部;
                   POST: 向服务器发送要处理的数据
                   PUT : 将请求的主体部分存储在服务器上,向服务器上传数据。
                   DELETE :请求删除服务器上指定的文档
                   TRACE :  追踪请求到达服务器中间经过的代理服务器;
                   OPTIONS: 请求服务器返回对指定资源支持使用的请求方法;

    Version:
                HTTP/<major>.<minor>      HTTP/1.1
    Status:
                 三位数字:如 200, 301 , 302 , 404 , 502 ;标记请求处理过程中发生的情况
    Reason-phrase
                状态码所标记的状态的简要描述;
    Headers:
                每个请求或响应报文可包含任意个首部:版本更新个首部都有首部名称,后面跟一个冒号,
                而后跟上一个可选空格,接着是一个值;
    Entity-body: 请求时附加的数据或响应时附加的数据

     200: 成功,请求数据通过响应报文的entity-body部分发送;OK
     301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部    (永久跳转)
    Location指明了资源现在所处的新位置; Moved Permanently   
     302: 响应报文Location指明资源临时新位置 Moved Temporarily   (临时跳转)
     304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变  
    ,则通过响应此响应状态码通知客户端; Not Modified
     401: 需要输入账号和密码认证方能访问资源; Unauthorized
     403: 请求被禁止; Forbidden  (被服务器拒绝访问 服务器要不deny掉客户IP或者服务器的权限rwx权限设置。服务不可访问,有可能selinux, iptables,rwx权限,httpd的order allow deny)
     404: 服务器无法找到客户端请求的资源; Not Found (客户访问的地址输入错误,也有可能是服务器内部的页面跳转指向了一个错误地址)
     500: 服务器内部错误; Internal Server Error
     502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到
    网关; Bad Gateway
     503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求
     504 – 网关超时 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值