15 Apache之httpd(上)

  • 传输层:提供进程地址

    • tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
               0-65535

    • udp:User Datagram Protocol ,无连接协议;
               0-65535

    • Port number:

  • socket:IPC(进程间通信)的一中实现,允许位于不同主机 (甚至同一主机)上不同进程之间进行通信,数据交换;Socket API

    • 22:tcp(ssh)

    • 53:tcp(dns)

    • 80:tcp(http)

    • 443:tcp(https)


    • 1-1023

    • 1024-41951:注册端口,但要求并不是特别严格,可分配给程序注册为某应用使用

    • 41952+:动态端口,又叫私有端口,供临时分配时使用 。客户端使用随机的端口

    • 常用端口:

    • SOCK_STREAM:tcp套接字

    • SOCK_DGRAM:udp套接字

    • SOCK_RAW:裸套接字 

  • tcp协议的特性:

    • 建立连接:三次握手

    • 数据打包成段:校验和 (使用CRC-32算法)

    • 确认、重传以及超时

    • 排序、逻辑序号:指出该段中的数据位于数据流中的什么位置

    • 流量控制:滑动窗口。每次确认时实现报文接收的空间大小告诉对方,从而实现流量控制

    • 拥塞控制:慢启动和拥塞避免算法   避免发送方发送比较快导致压垮网络和接收方

  • Socket Domain(根据其所使用的地址分类):

    • 流:可靠地传递、面向连接、无边界

    • 数据报:独立性、不可靠地传递、无连接、有边界


    • AF_INET:Address Family ,IPv4

    • AF_INET6:IPv6

    • AF_UNIX:同一主机上不同进程之间通信时使用,免得再进行tcp/ip封装等

    • 每类套接字都至少提供了两种socket(传输机制):流,数据报

  • 套接字相关的系统调用:

    • socket():向内核申请注册使用,创建一个套接字
      bind():绑定,声明要使用它
      listen():监听
      accept():接收请求
      connect():请求连接建立
      write():发送
      read():接收
      send(),recv(),sendto(),recvfrom()
  • http:hyper text transfer protocol

    • HTTP/0.9:原型版本。功能简陋,不支持MIME

    • HTTP/1.0:引入MIME机制等

    • HTTP/1.1:增强缓存功能

    • spdy:

    • HTTP/2.0:


    • URL:统一资源定位符 

    • URN:统一资源命名符

    • 静态

    • 动态

    • CSS、js、MIME(多用途互联网邮件扩展),实现基于文本格式发送非文本数据

    • html:编程语言,超文本标记语言

    • Web资源

    • URI:统一资源标识符

    • http协议版本:

  • 一次完整的http请求过程:

    • 对请求报文进行解析,并获知请求的资源及请求方法等相关信息

    • 接收来自网络的请求报文中对某资源的一次请求的过程:

    • 并发访问响应类型(web I/O)

    • 多线程模型:一个进程生成N个线程,每个线程响应一个请求

    • 事件驱动:一个进程同N个客户端进行通

    • 单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行访问

    • 多进程I/O结构:并行启动多个进程,每个进程 响应一个请求

    • 复用I/O结构:一个进程响应多个请求

    • 复用的多进程I/O结构:启动多个进程,每个进程响应单个或多个请求

    • 建立或处理连接:接收或拒绝请求

    • 接收请求:

    • 处理请求:

    • 访问资源:获取请求报文中请求的资源

    • 构建响应报文

    • 发送响应报文

    • 记录日志

  • http服务程序:

    • httpd(apache的程序名,apache已成为一开源组织的代称)

    • nginx

    • lighttpd

    • 应用程序服务器:

      • IIS

      • tomcat,jetty(前两者开源),jboss,resin

      • websphere(IBM),weblogic,oc4j

      • glassfish,gbox

  • httpd的特性:

      • 高度模块化:core+modules    不会发生血崩效应

      • DSO:Dynamic Shared Object

      • MPM:Mutipath Processing Modules 多路处理模块

        • prefork多进程模型。每个进程响应一个请求

          • 一个主进程,负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程(有上下限,最多1024个),随时等待请求到达

          • 主进程(80端口)监听套接字,主进程将收到的请求分发给子进程(非80端口)

        • worker多线程模型,每个线程响应一个请求。

          • 多个主进程。每个主进程生成多个子进程,每个子进程负责生多个子线程,每个线程响应一个请求(没有请求时也会预生成多个空闲线程,一遍快速响应)

          • m进程,n线程,m*n

        • event事件驱动模型,每个线程响应多个请求

          • 一个主进程,生成m个子进程,每个进程处理n个请求

          • httpd-2.2:event为测试使用

          • httpd-2.4:event可生产使用

  • http的功能特性:

    • 虚拟主机:

      • ip

      • 端口

      • FQDN

    • CGI:Common Gateway Interface:通用网关接口    实现支持动态页面

    • 反向代理

    • 负载均衡

    • 路径别名

    • 丰富的用户认证机制

      • basic

      • digest

    • 支持第三方模块

  • httpd的基本配置和应用

    • rpm包安装的httpd的默认工作目录(根目录):/etc/httpd

    • 配置文件:

      • 主配置文件:/etc/httpd/conf/httpd.conf
        分段配置文件:/etc/httpd/conf.d/*.conf
    • 服务脚本:

      • /etc/rc.d/init.d/httpd
      • 脚本的配置文件:/etc/sysconfig/http
    • 模块文件目录:

      • /etc/httpd/modules --> /usr/lib64/httpd/modules
    • 主程序文件:

      • /usr/sbin/httpd (prefork) 默认方式
        /usr/sbin/httpd.worker (worker)
        /usr/sbin/httpd.event (event)
    • 日志文件

      • /var/log/httpd
        access_log:访问日志文件
        error_log:包含错误及其他信息的日志文件
    • 站点文档目录:

      • /var/www/html
    • 配置文件:

      • Directive(指令)   Value(值) 

      • # grep "Section" httpd.conf
        ### Section 1: Global Environment
        ### Section 2: ‘Main‘ server configuration
        ### Section 3: Virtual Hosts
        “Main”server和Virtual Hosts不能同时启用,默认启用前者
      • 指定监听地址和端口

        • Listen [IP:]80

      • 持久连接:连接建立后,每个资源获取结束后不会断开连接,而继续等待其他资源请求并完成传输

        • 断开方法:

          • 数量限制  MaxConnetctionClients,根据通过该链路获取特定资源的次数断开

          • 时间限制  TimeOut

        • 缺点:对并发访问量较大的服务器,开持久连接会导致有些请求得不到服务

        • 改进:减短,httpd-2.4支持毫秒

      • 非持久连接:每个资源都是单独通过专用的连接进行获

        • [root@chanlay2 conf]# telnet 172.16.31.117 80
          ...
          GET /fstab http/1.1
          Host:172.16.31.117
          响应报文元数据
          fstab内容...
          Connection closed by foreign host请求完毕后直接断开连接

    • MPM:

      • 多路处理模块

      • 实现方式:prefork,worker,event

      • http-2.2 不支持同时编译两种以上实现方式

        • ps -aux|grep httpd
      • 默认为/usr/sbin/httpd,即prefork

      • httpd -l :查看必须的模块

      • httpd -M:查看所有已装载的模块

        • [root@chanlay2 conf]# httpd -M
          httpd: apr_sockaddr_info_get() failed for chanlay2
          httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
          Loaded Modules:
          core_module (static)
          ...//static表示已编译进程序的模块
          auth_basic_module (shared)
          ...//shared表示可动态装卸载
      • 更换支持不同MPM的主程序

        • 编辑/etc/sysconfig/http

          • [root@chanlay2 conf]# cat /etc/sysconfig/httpd
            ...
            # The service must be stopped before changing this variable.
            #
            #HTTPD=/usr/sbin/httpd.worker
            ...//将HTTPD解注释,然后改为目的MPM,重启httpd程序即可
      • <IfModule prefork.c>
        StartServers       8   //默认启动时会启动8个空闲子进程
        MinSpareServers    5                //最少空闲进程数
        MaxSpareServers   20              //最多空闲进程数
        ServerLimit      256                   //最多启动进程数
        MaxClients       256                  //最多客户端并发请求连接数
        MaxRequestsPerChild  4000  //每个子进程最多响应请求数
        </IfModule
    • DSO

      • 配置指令模块加载:

        • LoadModule <Module_Name> <Module_path>

        • 模块路径,可使用相对路径


    • 定义“Main”Server的文档页面路径

    • 站点路径访问控制

    • Directory中的访问控制定义




    • 注意:建议使用service httpd reload 重新装载配置文


    • httpd -t  //检查配置文件是否有误


    • 文档路径映射:

    • DocumentRoot指向的路径为URL起始的位置
                                 /var/www/html/images/1.jpg
                                 http://server/images/1.jpg

    • DocumentRoot指令

    • 基于来源地址

    • 基于帐号

    • <Location "URL">
          ...
      </Location>
    • <Directory "/PATH/TO/SOMEDIR">
           ...
      </Directory>
    • 文件系统

    • URL路径

    • 站点控制机制:

    • 定义的方式有两种:

    • 172.16

    • 172.16.0.0

    • 172.16.0.0/16

    • 172.16.0.0/255.255.0.0

    • IP地址

    • 网络地址

    • Order allow,deny  :只有明确Allow的来源地址,才允许访问,其他均为Deny
      Allow from all:允许访问的来源地址
      Deny from:拒绝访问的来源地址
    • DirectoryIndex:设置默认主页,自左向右搜索到的文件作为主页

    • 日志配置

    • 路径别名

    • 设定默认字符集

    • AddDefaultCharset  UTF-8
    • alias  /URL/  "/path/to/some_directory"
      将后者临时作为根目录DocumentRoot
    • ErrorLog  logs/error_log
      LogLevel warn
    • 访问日志,要定义日志格式

    • bla

    • from后可跟上的地址格式:

    • 每行定义一个组,格式

    • BASE64

    • <Directory "/var/www/html/stuff">
      348         options None
      349         AllowOverride None
      350         AuthType Basic
      351         AuthName "Secret For Common Stuff"
      352         AuthUserFile /etc/httpd/users/.htpasswd
      353         Require user tom,jerry
      354 </Directory>
    • 提供用户的帐号文件

    • digest:摘要认证

    • 应该有其名称,用于向用户通知此认证的原因等

    • Authorization:客户端用户填入帐号密码后再次发送请求至服务器,认证通过,则请求授权

    • 安全域:需要用户认证后方能访问的路径

    • http协议支持的认证方式:

    • 基于用户的访问控制

    • 虚拟主机

    •  htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
      -c:添加第一个用户时创建此文件
      -m:以md5格式加密用户密码存放
      -s:以sha格式加密用户密码存放
      -D:删除指定用户
    • Grp_Name: User1 user2

    • htpasswd命令用于维护此文件

    • 组认证:

    • WWW-Authenticate:服务器用401状态拒绝客户端要求,说明需要用户提供用户名和密码,弹出对话框
    • basic:基本认证

    • 质询:

    • 认证:

    • 基于IP

    • 基于PORT

    • 基于FQDN

    • <VirtualHost *:80>
      ServerAdmin [email protected]
      DocumentRoot /www/docs/dummy-host.example.com
      ServerName dummy-host.example.com
      ErrorLog logs/dummy-host.example.com-error_log
      CustomLog logs/dummy-host.example.com-access_log common
      </VirtualHost>
    • 注意:大多数可用于全局域‘main‘server 的命令同样可用于虚拟主机

    • 注意:额外经常用于每个虚拟主机的配置有:

    • Indexes:当访问的路径下无默认主页面文件,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户,非常危险,不建议使用
      FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其他文件时,将直接显示目标文件的内容   有风险,同样不建议使用
      None:不启用任何特性
      All:所有都启用
    • All

    • None

    • 首先将Main Server中的DocumentRoot 命令注释掉

    • 一个物理器可服务于多个站点,每个站点可通过一个或多个虚拟主机实现

    • http三种类型的虚拟主机

    • 内置的status页面

    • ErrorLog
      CustomLog
      <Directory>
      <Location>
      ServerAlias
    • Options

    • AllowOverride 是否读取.htaccess文件指令内容

    • 基于来源地址访问控制



<Locatio /server-status>    SetHandler server-status    Order deny,allow    Deny from all    Allow from 172.16.0.0/16
     </Location>




本文出自 “运维狗” 博客,请务必保留此出处http://yunweigou.blog.51cto.com/6299641/1652036

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。