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

相关推荐

  • 文件系统的创建和管理

    作业:文件系统的创建和管理 思路:管理通常就是增删改查[*代表某一数值,测试机centos6使用的就是ext4,不要问我为什么了,马哥告诉我的,你问他吧!];   事情准备检查系统支持和使用的文件系统格式:         #lsmod  &nbsp…

    Linux干货 2016-01-19
  • shell脚本之批量添加用户

        没错,这是一个简单的脚本,不写不知道,写了才发现自己多垃圾。     我是一名普通的公司网络管理,接触linux不长,一直理想都是和马哥学习linux,可惜因为拖家带口的原因,没办法交学费和马哥学习,心里小小遗憾吧。每天看着马哥的文章以及百度搜索的视频文章学习,感觉自己学…

    Linux干货 2016-07-07
  • 测试

    3、查询file.txt以abc结尾的行grep "abc$" file.txt4、删除file.txt文件中的空行grep -v '^$' file.txt > file.txtsed '/^$/d' file.txt > file.txt(覆盖重定向文件变为空该文件为空,但是追加时正常成功。…

    Linux干货 2016-06-12
  • 第三周博客作业

      开始学习已经三周了,感觉到年底有些时间不够,作业也交的越来越晚,需要加紧学习的进度了。   1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  最简单的实现题目要求的方法是使用cut命令只显示用户名并用sort命令排序去重: [root@localhost ~]# who |&nbs…

    Linux干货 2016-12-20
  • N25 The first week –Yorick

    1.计算机的组成及功能 ENIARC:冯诺依曼体系 1.1.运算器(所属CPU)     进行计算 1.2.控制器(所属CPU)     控制部件之间的协调,包括寻址操作     辅助性存储(加速与提升CPU性能)     寄存器(锁存数据)     缓存(缓…

    Linux干货 2016-12-04
  • 文件的权限和访问控制列表

      在linux管理中,为了使不同的用户对文件有不同的操作权限。我们需要正确的修改文件的权限,一方面是为安全着想, 另一方面则是防止自己辛辛苦苦码出的东西被其它用户给误删。 1.如何修改文件的属主和属主:   前面用户和组管理的内容中,我们已经对文件的属主、属组问题做了说明。有时候我们需要对一些文件的属组和属组进行修改…

    Linux干货 2016-08-04

评论列表(1条)

  • stanley
    stanley 2016-02-14 09:43

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