浅谈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

相关推荐

  • N25-第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost tuser1]# cp -r /etc/skel/ /home/tuser1 [root@localhost tuser1]#&nb…

    Linux干货 2016-12-25
  • Linux 性能监控、测试、优化工具

    Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的、简单的小工具。系统性能专家 BrendanD. Gregg 在最近的 LinuxCon NA 2014 大会上更新了他那个有名的关于 Linux 性能方面的 talk (Linux Performance Tools) 和幻灯片。    和 Br…

    Linux干货 2015-03-03
  • 文本三剑客之sed

    文本处理三剑客之sed sed 本身也是一个管线命令,是一个(流|行)编辑器! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能。工作模式是从源文件中一次读取一行,存储到sed自己的内存中进行处理,如果模式被匹配到就可以编辑并且输出到标准输出,如果没有被匹配到则直接输出到标准输出。     sed …

    Linux干货 2016-08-10
  • 制作epel源

    在linux的使用过程中,ISO镜像的rpm包并不是十分的齐全。这个时候就需要去epel源去下载安装rpm包安装。这里简单的描述下epel源的配置方法。仅供参考。 1.关闭SELinuxsed -i.bak ‘s/SELINUX=enforcing/SELINUX=permissive/’ /etc/selinux/config se…

    2017-12-18
  • N22-第六周博客作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit …

    Linux干货 2016-09-26
  • 创建一个简易的Linux

      目标:   为CentOS 6添加一块新硬件,提供两个主分区;    (1) 为硬盘新建两个主分区;并为其安装grub;    (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个 分区提供rootfs;    (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;    (4) 为grub提供配置文件;    …

    Linux干货 2016-12-30

评论列表(1条)

  • stanley
    stanley 2016-02-14 09:43

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