浅谈HTTP协议以及httpd的十八般武艺

  初识HTTP协议    


 

         HTTPhyper text transfer protocal)作为互联网应用最广泛的协议,任何一个运维人员都无法回避它,HTTP的目的就是提供一种发布和接收html页面的方法,为了更好的理解HTTP协议,首先需要了解几个常识:

         1URLUniform Resource Locator)统一资源定位符,用于描述某个服务器上某个特定资源的位置,也就是通常我们见到的网址。

         2HTMLHyper Text Markup Language)超文本标记语言,HTML 语言是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。这样,你只要使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去。

         3TCPTransmission Control Protocol)传输控制协议,是面向连接的协议,也就是说通讯前要建立虚拟链接,而HTTP的协议就是通过TCP来实现的。

        HTTP的工作机制:就是基于B/S(浏览器/服务器)架构,由浏览器(即客户端)发起http请求—->服务器响应http请求。

    一次完整的http请求过程如下

绘图1.jpg


 常见的HTTP服务器程序以及应用程序服务器


 

       常见的http服务器程序:

       httpd(apache)

       nginx

       lighthttpd

       常见的应用程序服务器:

        IIS(microsoft)

        tomcat

        jetty

        jboss

        weblogic

        webshpere(IBM)

 

httpd的功能特性


        httpd主要有以下特性

            高度模块化:core + modules
            DSO: Dynamic Shared Object,动态共享库
            MPM:Multipath Processing Modules,多道处理模块
                 prefork:多进程模型,每个进程响应一个请求;一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子 进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
                 worker:多线程模型,每个线程响应一个请求; 一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
                 event:事件驱动模型,每个线程响应n个请求; 一个主进程:生成m个子进程,每个进程直接n个请求;
  

        同时支持以下功能

       1、虚拟主机
       2、 IP、Port、FQDN
       3、CGI:Common Gateway Interface,通用网关接口;
       4、 反向代理
       5、 负载均衡
       6、路径别名
       7、丰富的用户认证机制
       8、basic
       9、 digest
      10、支持第三方模块

 

httpd的安装与配置


       yum安装httpd

yum install -y httpd
service httpd start

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

 
   配置文件:
       主配置文件:/etc/httpd/conf/httpd.conf
       分段配置文件:/etc/httpd/conf.d/*.conf
   服务脚本:/etc/rc.d/init.d/httpd
   脚本的配置文件:/etc/sysconfig/httpd
   模块文件目录:/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

 

httpd的十八般武艺


 1、指定监听端口

Listen 80

        (1) IP省略时表示监听本机上所有可用的IP地址;
        (2) Listen指令可以出现多次,用于指明多个不同的监听端口或套接字

2、持久连接的相关配置

KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

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

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

3、并发请求模式的不同实现

         httpd-2.2 不支持同时编译多个不同的MPM,rpm安装的httpd-2.2提供了三个文件分别用于实现提供对不同的MPM的支持;确认方法:

ps aux | grep httpd

         默认为/usr/sbin/httpd,其为prefork; 
         查看模块列表:

httpd -l        #查看静态编译的模块
httpd -M        #查看所有模块,包括静态编译和DSO模块

4、DSO动态装卸载模块的实现

# The following modules are not loaded by default:
#LoadModule asis_module modules/mod_asis.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule unique_id_module modules/mod_unique_id.so

        要想启用httpd的摸个模块只需要将前面的#号去掉即可,是不是很方便

5、定义“main server”的文档页面路径

        文档路径映射:
            DocumentRoot指向的路径为URL起始的位置:/var/www/html/

6、站点访问控制

        访问控制机制:
            1、基于来源地址
            2、基于账号

7、Directory中的访问控制定义

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

        2、 基于来源地址访问控制
                Order: 检查次序
                Order Allow Deny:只有明确Allow的来源地址,才允许访问,其它的均为Deny
                Order Deny Allow:
                Allow from:允许访问的来源地址
                Deny from:拒绝访问的来源地址

8、定义默认主页面

DirectoryIndex index.html index.php

        自左向右,查找首次匹配到的文件就将其作为主页面

9、配置日志

        错误日志:
            ErrorLog logs/error_log
            LogLevel warn

       访问日志:要定义日志格式
            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
            CustomLog logs/access_log combined

            %h: Remote host,客户端主机
            %l: Remote logname (from identd, if supplied). 客户用户通过identd登录时使用名称;一般为-;
            %u: Remote user (from auth; may be bogus if return status (%s) is 401),用户认证登录的名字;无登录机制一般-;
            %t: Time the request was received (standard english format),收到客户端请求时的时间;
            \": 显示引号本身,而不作为引用符号;
            %r:First line of request,请求报文的首行
             <method> <url> <version>
            %>s:响应状态状态码
            %b: Size of response in bytes, excluding HTTP headers,响应报文的大小,单位为字节;不包含首部信息;
            %{Referer}i:记录Http首部Referer对应的值;即访问入口,从哪个页面跳转至此页面;
            %{User-Agent}i:记录http首部User-Agent对应的值;即浏览器类型;

10、路径别名

Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

11、设定默认字符集

AddDefaultCharset UTF-8        #常用的字符集:GBK GB2312 GB18030

12、基于用户的访问控制

        http协议支持的认证方式:
            basic:基本BASE64basic,认证机制的实现

            1、定义安全域

<Directory "/data/web/html/employee">
         Options None
         AllowOverride None
         AuthType Basic
         AuthName "Employee Infomation, only for employee"
         AuthUserFile /etc/httpd/users/.htpasswd
         Require user tom jerry
</Directory>

            2、提供用户的帐号文件

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

            3、组认证

<Directory "/data/web/html/employee">
         Options None
         AllowOverride None
         AuthType Basic
         AuthName "Employee Infomation, only for employee"
         AuthUserFile /etc/httpd/users/.htpasswd
         AuthGroupFile /etc/httpd/users/.htgroup
         Require group GRP1 GRP2 ...
</Directory>

    

13、虚拟主机的三种实现方式

        httpd三种类型的虚拟主机:
                基于IP
                基于Port
                基于FQDN

        定义虚拟主机的方法:

<VirtualHost "IP:PORT">
     ServerName 
     ServerAlias
     DocumentRoot
</VirtualHost>

14、内置的status页面

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

15、使用mod_deflate模块压缩页面优化带宽

           适用场景:
                1、节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
                2、压缩适于压缩的资源,例如文件文件;

SetOutputFilter DEFLATE
   # mod_deflate configuration
   # 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
   # Level of compression (Highest 9 - Lowest 1)
   DeflateCompressionLevel 9    
   # Netscape 4.x has some problems.
   BrowserMatch ^Mozilla/4 gzip-only-text/html 
   # Netscape 4.06-4.08 have some more problems
   BrowserMatch ^Mozilla/4\.0[678] no-gzip
   # MSIE masquerades as Netscape, but it is fine
   BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

16、https的实现方法

         配置httpd支持https:
            1 、为服务器申请数字证书;
                  (a) 创建私有CA

                            生成私钥文件

openssl genrsa -out private/cakey.pem 2048

                            生成自签证书

spenssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 10000

                            提供辅助文件

touch index.txt
echo 01 > /etc/pki/CA/serial

                   (b) 在服务器创建证书签署请求

                            生成私钥在/etc/httpd/ssl/

(umask 077 openssl genrsa -out httpd.key)

                            生成证书签署请求

openssl -req -new -key httpd.key -out httpd.csr

                  (c) CA签证

                            获取证书签署请求

                            签证证书

openssl ca -in httpd.csr -out -days 3665

            2、 配置httpd支持使用ssl,及使用的证书;

yum -y install mod_ssl

             配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

            3、测试基于https访问相应的主机;

17、httpd自带的工具程序

            htpasswd: basic认证基于文件实现时,用到的账号密码文件生成工具;
           apachectl:httpd自带的服务控制脚本,支持start, stop;
           apxs:由httpd-devel包提供的,扩展httpd使用第三方模块的工具;
           rotatelogs:日志滚动工具;
           suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行;

18、httpd压力测试工具

           ab [OPTIONS] URL
                    -n: 总的请求数
                    -c:模拟的并发数
                    -k: 以持久连接模式测试

         以上就是httpd 的十八般武艺,或许你会觉得不以为然,但是别忘了,这些都是基本功,只有基本功扎实了,你的江湖路才能走的更加坦然。

     

原创文章,作者:zhang,如若转载,请注明出处:http://www.178linux.com/10916

(0)
zhangzhang
上一篇 2016-02-14
下一篇 2016-02-14

相关推荐

  • Linux的文件压缩、解压之tar的使用

    文件的压缩   一、压缩、解压缩及归档工具 压缩 解压 后缀(压缩后) file-roller 图形操作界面上的使用(略) compress 解压一:uncompress 或compress -d (注:使用上面的解压命令,实际上是在屏幕上打印解压的文件信息,并不是真正上解压到文件,所以需要在命令后面加上“重定向到指定的文件中”,方可完成解压。如:…

    Linux干货 2016-08-18
  • Linux用户及用户组管理

    马哥网络教育22期第三周练习 Linux用户及用户组管理 Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的…

    Linux干货 2016-09-19
  • 基于Corosync + Pacemaker+DRBD实现MySQL高可用集群

    前言 在众多的高可用集群解决方案中,除了Heartbeat之外,Corosync也能提供类似于Heartbeat一样的功能,而且目前RedHat官方提供的高可用集群解决方案的程序包都以Corosync为主,所以今后Corosync会逐渐取代Heartbeat。本文带来的是基于Corosync + Pacemaker+DRBD的MySQL高可用集群解决方案。 …

    Linux干货 2015-06-12
  • 第二十周作业

    1、用Keepalived实现nginx与lvs的高可用集群; lvs+keepalived: 1)后端两台rs上安装web服务并创建探测页面 ~]# yum install nginx -y ~]# systemctl start nginx.service ~]# vim /usr/share/nginx/html/index.html <h1&g…

    2017-07-03
  • sed工具实践解析

    此次博文介绍一下文本处理三剑客中的sed工具(点击查看grep工具http://www.178linux.com/83512) 介绍sed: sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。 运行过程: sed编辑器逐行处理文件,并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理…

    Linux干货 2017-08-26
  • AWK(一)

    本章内容:awk介绍;awk基本用法;awk变量;awk格式化;awk操作符;awk条件判断;awk循环;awk数组;awk函数;调用系统命令

    2018-01-01

评论列表(1条)

  • stanley
    stanley 2016-02-14 09:43

    现在研究基础的人不多了,赞