http

本文介绍了HTTP协议的基本概念及其在TCP/IP体系结构中的位置,并详细解释了HTTP响应流程。此外,还深入探讨了Apache Web服务器的特性、配置方法以及如何通过不同的多路处理模块来优化其性能。

HTTP

TCP/IP体系结构

层级作用
网络接口层(Link)用来处理连接网络的物理设备
网际层(Internet)处理在网络上流动的数据包
运输层(Transport)负责向两个主机进程之间的通信提供通用的数据传输服务 (TCP、UDP)
应用层(Application)通过应用进程简的交互来完成特定的网络应用。(HTTP、DNS)

HTTP协议介绍

HTTP(HyperText Transfer Protocol,超文本传输协议)用于实现Web服务器与HTTP客户端交换数据的一种实现方式。

Unknown

HTTP响应流程

1、建立连接

接收或拒绝连接请求

2、接收请求

接收客户端请求报文中对某资源的一次请求的过程

3、处理请求

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

4、访问资源

服务器获取请求报文中请求的资源web服务器,即存放了Web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

5、构建响应报文

一旦Web服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包含响应主体。

6、发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确的计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。

Web访问响应模型

  • 单进程I/O模型: 启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求。
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接受M*N个请求

Apache

Httpd介绍

20世纪90年代初,NCSA(National Center for Supercomputing Applications,国家超级电脑应用中心)开发。1995年开源社区发布Apache(a patchy server),后来,随着软件的发展,逐步成为ASF(Apache Software Foundation,Apache 软件基金会)

Httpd特性

  • 高度模块化:Core + Modules

  • DSO:Dynamic Shared Object 动态加/卸载

  • MPM:Multi-processing module. 多路处理模块,在MPM中,有三种工作模式:

    prefock:多进程I/O模型,每个进程响应一个请求,默认模型。相当于Web访问响应模型中的多进程I/O模

    在Cent OS6中,最大的进程数为2080(可用ulimit -a来查看),当然喽,这个值也是可以修改的啦!这样的话,当用户访问量变多时,这种模型就不适用了。

    worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

    event:事件驱动模型(worker模型的变种):一个主进程:生成M个子进程,每个进程直接响应N个请求:M*N ,有专门的线程来管理这些Keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力。

Httpd使用

Environment:Cent OS6

Version 2.2.15

1、安装httpd
    # yum -y install httpd
2、查看httpd服务配置文件
    # rpm -ql httpd
          配置文件:修改完配置文件可用 'httpd -t' 检查配置文件语法
                /etc/httpd/conf/httpd.conf
                /etc/httpd/conf.d/*.conf
          服务脚本:
                /etc/rc.d/init.d/httpd
          服务脚本配置文件:
                /etc/sysconfig/httpd
                    PIDFILE=/var/run/httpd/httpd.pid --- 主进程进程号
          主程序文件:
                /usr/sbin/httpd
                /usr/sbin/httpd.event
                /usr/sbin/httpd.worker
          日志文件目录:
                /var/log/httpd
                    access_log: 访问日志
                    error_log:错误日志
          站点文档目录:
                /var/www/html
          模块文件路径:
                /usr/lib64/httpd/modules
          帮助文档包:
                httpd-manual
3、启动httpd服务:
    # service httpd start
4、查看端口号是否已打开:--- 此时80端口已打开
    # ss -ntlp  -- 此时80端口已打开,可以访问http://172.16.11.88
5、测试httpd连接: --- 默认httpd服务路径为/var/www/html
    # mkdir /var/www/html/do
    # echo "tocky is a boy" > /var/www/html/do/qu.html
    # telnet 172.16.11.88 80
    GET /do/qu.html http/1.1    
    host:172.16.11.88
6、启用httpd-manual
    # yum -y install httpd-manual
    # servcie httpd reload
    # http://172.16.11.88/manual/   ---此时便可通过浏览器正常访问帮助文档内容。
7、httpd常见配置:
    服务器辨识主机名和端口号
        ServerName www.example.com
    配置Web Server的响应头部
        ServerTokens Prod  
    配置Web Server的响应头部
        Listen 172.16.11.77:80
    持久连接(Persistent Connection):连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成。默认关闭持久连接
        KeepAlive Off   --- 默认是关闭的
        MaxKeepAliveRequests 100    --- 最大的连接请求次数
        KeepAliveTimeout 15 --- 连接超时时间
    MPM(Multi-Processing Module,多路处理模块)
        # httpd -l  --- 系统当前加载的静态模块
        # http -m   --- 系统加载的所有模块,包括动态模块
    默认加载的模块
        LoadModule auth_basic_module modules/mod_auth_basic.so  
    网站主页路径配置:
        DocumentRoot "/var/www/html"
8、将系统默认模块prefock修改为
    # vim /etc/sysconfig/httpd  --- 修改服务脚本配置文件httpd.worker为
        HTTPD=/usr/sbin/httpd.worker
    # service httpd restart --- 重启服务后生效
    # httpd.worker -l   --- 查看worker模块
    # yum -y install httpd-tools  --- 安装httpd-toos工具,ab工具可以测试性能,集成在httpd-tools
    # ab -c 1000 -n 10000 http://172.16.11.88/  --- 测试worker模块性能。
9、站点访问控制
    # vim  /etc/httpd/conf/httpd.conf 
        <Directory "/var/www/icons">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
        </Directory>
10、日志设定:
    # vim  /etc/httpd/conf/httpd.conf 
        ErrorLog logs/error_log
        LogLevel warn   --- 错误级别,不同级别日志记录详细度不一样。
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined   --- 日志格式定义,
11、基于用户的访问控制
    客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源。使用专用命令完成此类文件的创建及用户管理
    htppasswd [options] /PATH/HTTP_PASSWD_FILE username
        -c: 自动创建文件,仅应该在文件不存在时使用
        -m: md5格式加密
        -s: sha格式加密
        -D: 删除指定用户
    1、 创建httpd账号
        # htpasswd -c /etc/httpd/conf.d/httpd_users tocky   --- 指定用户密码为tocky
    2、创建文件夹:
        # mkdir /var/www/html/do
    3、针对用户tocky启用文件夹/var/www/html/do的用户验证
        # vim /etc/httpd/conf/httpd.conf 
            <Directory /var/www/html/do>
            authtype basic
            authname "tocky"
            authuserfile "/etc/httpd/conf.d/httpd_users"
            require user tocky
            </Directory>
        # service httpd restart
        # httpd://172.16.11.88/do/  --- 此时访问/var/www/html/do需要用户验证。
12、虚拟主机:一台主机上配置多个网站
    基于IP的虚拟主机
    基于Port的虚拟主机

转载于:https://www.cnblogs.com/Linux-boy/p/7298244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值