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支持毫秒
          • 非持久连接:每个资源都是单独通过专用的连接进行获
            • [[email protected] 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:查看所有已装载的模块
            • [[email protected] 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

              • [[email protected] 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>



          时间: 2024-10-20 15:32:01

          15 Apache之httpd(上)的相关文章

          linux上安装apache(httpd)

          安装包 httpd-2.2.29.tar.bz2 (可以去网站查看最新版本:http://httpd.apache.org/security_report.html) tar -jxvf httpd-2.2.29.tar.bz2 cd httpd-2.2.29 [[email protected] httpd-2.2.29]# ./configure --prefix= /usr/local/apache 如出现编译错误,则需安装gcc rpm -ivh gcc-4.4.7-11.el6.x86

          linux上安装apache以及httpd.conf基本配置

          1.yum安装apache #yum install httpd -y 2.随系统自启动 #chkconfig httpd on 3.开启apache #service httpd start PS:在CentOS里Apache的默认文档路径的位置是在/var/www/html,配置文件的路径是/etc/httpd/conf/httpd.conf.其他的配置存储在/etc/httpd/conf.d/ 文件夹里. 建议删除/etc/httpd/conf.d/下的welcome.conf文件 删除指

          【转】Apache 的 httpd.conf 配置详解

          Apache 的 httpd.conf 配置详解 原文链接 http://www.php100.com/html/webkaifa/apache/2009/0418/1192.html ServerRoot /usr/local ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run

          Apache 配置文件httpd.conf 的含义

          ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run/httpd.scoreboard httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apach

          11.6 MariaDB安装;11.7 Apache安装(上)11.8 Apache安装(中)11.9 Apache安装(下)

          11.6 MariaDB安装 1. 进入下载安装包目录: [[email protected] ~]# cd /usr/local/src 2. 下载mariadb安装包: [[email protected] src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 3. 解包

          Apache配置文件httpd.conf内容翻译

          本文已经废弃,现在apache2不依靠httpd.conf来配置. Ubuntu下默认的配置文件是/etc/apache2/sites-available/default 可以修改上面文件来修改apache2配置 目录 [隐藏] 1 原文说明 2 文件全局说明 3 第一区:全局环境参数 4 第二区:“主”服务配置 5 第三区:虚拟主机 原文说明 引自www.linuxsir.org 原文地址:http://www.7880.com/Info/Article-3df0ef00.html 文件全局说

          解析apache的httpd.conf配置内容

          ServerRoot /usr/local ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run/ht ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此

          Apache 的 httpd.conf 详解

          ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run/httpd.scoreboard httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apach

          Linux下使用Apache的Httpd+Mod_jk+Tomcat搭建Web集群服务

          Linux下使用Apache的Httpd+Mod_jk+Tomcat搭建Web集群服务 目的 ?? 使用多个tomcat服务器来对请求进行分流,防止单个服务器压力过重.这里为了简单,只使用两个tomcat. 软件 apache httpd-2.2.31(下载地址:https://httpd.apache.org/download.cgi) apache tomcat-7.0.69(下载地址:https://tomcat.apache.org/download-70.cgi) tomcat-con