美文网首页
D-41HTTP网络协议说明

D-41HTTP网络协议说明

作者: 荆俊玮 | 来源:发表于2019-08-28 22:16 被阅读0次

    一、ansible剧本角色功能配置说明

    角色功能作用

    1.让剧本配置更加规范
    2.可以让剧本信息简化
    3.可以在汇总剧本中看到主机信息

    配置角色功能

    第一个里程:配置主机清单
    vim /etc/ansible/roles/hosts ==>新的用于角色的主机清单
    配置方式与ansible主机清单方式一致;如:

       [rsync_server]
       172.16.1.41
       [rsync_client]
       172.16.1.31
       172.16.1.7
    
       [nfs_server]
       172.16.1.31
       [nfs_client]
       172.16.1.41
       172.16.1.7
    

    第二个里程:创建角色目录
    路径:/etc/ansible/roles
    注意:该目录下创建角色目录最好能与角色主机清单相对应,使人更好理解,且需要在该目录下创建多个子目录(子目录为官方推荐目录)
    子目录创建及作用:
    tasks:目中定于任务的剧本信息
    files:保存分发文件信息
    vars:目录保存定义变量剧本文件
    handlers:目录中保存触发器剧本信息
    templates:目录中保存模板文件又称为jinjia2
    以上目录为固定目录,必须存在
    统一创建目录及子目录命令:
    ansible-galaxy init 名称(最好与角色清单相对应)
    第三个里程:配置角色目录中剧本信息
    1.编写tasks/main.yml
    方式一:将剧本中所有执行的任务即命令统一存放在该目录,存在main.yml总文件中
    如:

        - name: install software
          yum: name=rsync state=installed
        - name: push file info
          copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
          with_items:
            - {src: 'rsyncd.conf', mode: '644'}
            - {src: 'rsync.password', mode: '600'}
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: create user
          user: name=rsync shell=/sbin/nologin create_home=no
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: create backup dir
          file: path=/backup state=directory owner=rsync group=rsync
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: boot server
          service: name=rsyncd state=started enabled=yes
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: check rsync server status
          shell: netstat -lntup|grep rsync
          register: rsync_state
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: show rsync port info before
          debug: msg={{ rsync_state.stdout_lines }}
          when: ansible_eth0.ipv4.address == "10.0.0.41"
        - name: push pass file
          copy: content='oldboy123' dest=/etc/rsync.password mode=600
          when: ansible_eth0.ipv4.address != "10.0.0.41"
    

    方式二: 将每个任务拆分,再放到tasks目录下的拆分文件中
    如:

    vim install_file.yml
        - name: install software
          yum: name=rsync state=installed
    
    vim copy_file.yml
     - name: push file info
          copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
          with_items:
            - {src: 'rsyncd.conf', mode: '644'}
            - {src: 'rsync.password', mode: '600'}
          when: ansible_eth0.ipv4.address == "10.0.0.41"
    


    将多个拆分文件整合
    vim main.yml
    - include_tasks:install_file.yml
    - include_tasks:copy_file.yml

    优势:1.可以更好识别整个剧本;2.通用性高
    2.保存files文件信息
    将所有需要分发的配置文件保存到相应的目录中,用于方便调取使用包括服务端和客户端
    如:

    [root@m01 files]# cp  /usr/local/sersync/conf/confxml.xml ./
    [root@m01 files]# ll
    total 4
    -rw-r--r-- 1 root root 2217 Aug 29 04:49 confxml.xml
    

    3.配置vars/main.yml文件
    将剧本中的变量放在该文件中,用于方便调取使用
    如:

        conf_dir: /etc/
        file_dir: /ansible_playbook/file
    

    4.配置handlers/main.yml文件

        - name: rsync_restart
          service: name=rsyncd state=restarted
        - name: rsync_port
          shell: netstat -lntup|grep rsync
          register: rsync_port
        - name: rsync_port_info
          debug: msg={{ rsync_port.stdout_lines }}
    

    第四个里程:调取角色信息

    vim /etc/ansible/roles/site.yml
    - hosts: rsync_server,rsync_client
      roles:
        - rsync
    

    第五个里程:执行角色汇总副本
    ansible-playbook /etc/ansible/roles/site.yml -i /etc/ansible/roles/hosts

    补充:对于一些不经常改动的变量可以存放在/etc/ansible/roles/nginx/defaults/main.yml文件中,此文件中变量可以被角色调用

    补充:tenplates模板目录

    作用:放置存储模板文件
    第一里程:修改配置文件变成模板文件,即将配置文件中的某些参数值就改为变量,再在变量文件中进行赋值
    如:

    vim /etc/ansible/roles/files/rsyncd.comf
    uid = rsync
    gid = rsync
    port = {{ port }}
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    #hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.password 
    [backup]
    comment = "backup dir by oldboy"
    path = /backup/
    

    将变量信息存储在对应角色的变量文件中
    如:

    vim /etc/ansible/roles/rsync/vars/main.yml
    port: 873
    

    第二里程:需要将模板文件移动到templates目录中
    mv /etc/ansible/roles/rsync/files /etc/ansible/roles/rsync/templates

    第三里程:修改复制数据的模块
    用copy复制文件数据类似于‘’所见即所得
    用template复制文件类似于“”可以解析{{}}调取变量信息
    将/etc/ansible/roles/tasks/main.yml文件中的copy模块替换成template模块
    copy ==>template 其余不变(只在分发文件中存在变量的copy模块更改即可)


    image.png

    二、用户访问网站原理过程

    过程:

    1.进行域名解析过程 ==>dns解析过程其实就是通过已知的域名找到它真实的IP地址
    过程为:本地查询(查询本地缓存,查询本地hosts文件) ==>递归查询(查询locaDNS服务器即网卡上指定配置的DNS服务器) ==>迭代查询(前两者均查询不到时,将从根服务器顶级服务器一级服务器二级服务器一代代进行查找;一般在二级服务器中就会查找到域名和IP地址的对应关系的记录,称为A记录)找到后再将A记录按照原路径返回告知localDNS服务器再告知本地服务器,再进行访问IP地址
    2.和网站服务建立连接 ==>三次握手过程
    3.发送HTTP请求信息 ==>发送的是HTTP请求报文
    4.发送HTTP响应信息 ==>发送的是HTTP响应报文
    5.和网站服务断开连接 ==>四次挥手过程

    HTTP协议概念

    概念:超文本传输协议;在网页上看见的文本信息,且具有超链接功能的文本信息,成为超文本信息

    HTTP请求报文结构信息

    *代表dns解析过程,将域名转换成相关的IP地址,再将IP地址所对应的服务器发送请求报文信息

    请求行:> GET /oldboy.jgp HTTP/1.1(>代表以>起始的行为请求报文)

    ①.请求方法:GET
    GET(获得)==>客户端从服务端获得页面数据信息
    POST(提交)==>提交是指客户端发送数据到服务端
    ②:请求内容: /oldboy.jgp
    请求的网站资源信息(页面文件、图片、视频、音频等)在没有具体请求时,会默认请求请求首页文件(index.html)
    ③:请求使用的协议:HTTP/1.0或者HTTP/1.1;以及在高并发的情况下使用的HTTP/2.0,HTTP/2.0协议在处理如双十一这种大量用户同时访问时,处理的效率会更高,但一般情况下不会使用。
    HTTP/1.1:对应TCP长链接使用方式,就是用户访问网站时,会产生多个请求报文,只要请求报文不断产生,服务端就会不断回复响应报文,直至没有请求报文时,再进行四次挥手过程,效率更高


    image.png

    HTTP/1.0:对应TCP短链接使用方式,就是用户访问网站时,产生多个请求报文,而客户端发送第一个报文请求,服务端回复一个响应请求后客户端便向服务端发送四次挥手过程,发送第二个请求报文时,需客户端再次向服务端进行三次握手的过程,效率较低


    image.png

    请求头:

    如:
    > User-Agent: curl/7.29.0
    > Host: www.oldboyedu.com
    > Accept: /
    ①:Host: www.oldboyedu.com ==>指定显示什么网站
    www.oldboyedu.com其中www为主机记录信息,oldboyedu为域名信息,主机信息包括www,bbs,blog等;而域名在与IP地址建立解析关系即A记录关系时就需要自行配制,此时就需要相应的主机记录信息。
    ②:User-Agent: curl/7.29.0 ==>根据用户访问客户端信息不同,可以显示不同的页面

    空行

    起到分割作用,空行以上为请求头,空行以下为请求主体

    请求主体:

    GET请求方法没有请求主体
    POST请求方法才具有请求主体,自主搭建网站时详解

    image.png

    HTTP响应报文结构信息

    起始行:< HTTP/1.1 302 Found(<代表以<号起始的行为响应报文)

    ①:协议信息:同请求报文 ==>HTTP/1.1
    ②:响应状态码信息:302 Found ==>通过编码形式告知响应结果


    image.png

    ps:当用户访问网站时,由于访问的资源在服务器端不存,正常显示应该为404,找不到该网页,但还会出现302临时跳转的情况,将找不到该网页自动跳转到主页面,此种网站优化被称为优雅显示方法


    image.png

    补充:301与302具体区别

    对于一用户第一次访问某网站时,由于访问的网址信息问题,需进行跳转跳转到正确的网址,再进行访问,过程为:第一步:用户通过客户端(浏览器)输入访问网址信息
    第二步:客户端将请求进入网址页面报文发送给服务端
    第三步:服务端回复正确的响应网址页面报文给客户端
    第四步:客户端发送正确的请求查看网址页面报文给服务端
    第五步:服务端发送响应网址页面报文给客户端


    image.png

    而当用户再次访问该网站时,还是输入错误的网址信息,导致跳转正确的页面,此时对于301永久跳转来说:用户第二次访问该网站时,会在客户端进行自动将以往的地址翻译为正确的地址,然后进行请求报文发送(让浏览器保存跳转记录,主要应用场景为企业域名发生变更);对于302临时跳转来说:与用户第一次访问该网站无任何区别,依然执行上述五部过程(不让浏览器保存跳转记录,主要应用场景为企业地址临时发生变化,如双十一活动,临时促销等)
    301永久跳转过程:
    第一步:用户第二次访问,通过浏览器输入以往地址在客户端
    第二步:客户端自动将错误地址改变为当前正确地址
    第三步:客户端发送正确网址请求页面报文给服务端
    第四步:服务端发送给客户端正确网址的响应页面报文


    image.png

    响应头:

    如:
    < Date: Thu, 29 Aug 2019 02:41:52 GMT
    < Content-Type: text/html
    < Content-Length: 235
    < Connection: keep-alive
    < Location: https://www.oldboyedu.com/oldboy.jgp
    < Via: HTTP/1.1 SLB.64
    Cache-Control:max-age=86400 ==>缓存时间
    Connection: keep-alive ==>开启长链接功能
    Content-Length ==>回复信息消耗流量,单位:字节
    Server:Apache ==>网站web服务器种类

    空行

    起到分割作用,空行以上为响应头,空行以下为响应主体

    响应主题

    响应主题就是由代码组成的字符集信息,服务端将这些响应主体放在整个响应报文中,交给客户端,而客户端的前端也就是浏览器将这些代码组成的字符集转变成页面信息
    如:
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html>
    <head><title>302 Found</title></head>
    <body bgcolor="white">
    <h1>302 Found</h1>
    <p>The requested resource resides temporarily under a different URI.</p>
    </body>
    </html>

    相关文章

      网友评论

          本文标题:D-41HTTP网络协议说明

          本文链接:https://www.haomeiwen.com/subject/mvguectx.html