码迷,mamicode.com
首页 > Web开发 > 详细

httpd详解

时间:2015-09-19 19:47:21      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:httpd   mpm   dso   

    httpd是一款高效的服务器应用程序,是http协议的一种实现。在探讨httpd之前,我们来大概了解一下http协议吧,http协议实现了客户端和web服务器之间的通信,它是一种应用层协议。

http协议特性:

1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

http协议工作流程:

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。接收请求或拒绝请求

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

5)服务器端记录日志


有了这些基础概念,我们来了解一下httpd:

实验过程中关闭selinux和iptables(iptables -F)

1.httpd的配置文件

程序环境
    配置文件:
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf

技术分享

    服务脚本:
    /etc/rc.d/init.d/httpd
    配置文件:/etc/sysconfig/httpd
    主程序文件:
    /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


    配置格式:directive value-------指令 值  格式
    directive: 不区分字符大小写;
    value: 为路径时,取决于文件系统;


1.配置监听的端口:(端口,套接字等相关概念请看上一篇博客) 

技术分享

修改完成后重读配置文件service httpd restart

查看监听的端口:发现tcp80和8080都监听了

技术分享

2.非持久连接:每请求一个资源都需要建立一次tcp/ip会话,浪费带宽

持久连接:连接建立,每个资源获取完成后tcp/ip会话不会断开连接,而是继续等待其它的请求完成;

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应;
折衷:使用较短的持久连接时间;
httpd-2.4 支持毫秒级持久时间;

KeepAlive On|Off  持久连接开关
MaxKeepAliveRequests #  持久连接最大请求资源数量
KeepAliveTimeout # 持久连接超时时间

技术分享

使用telnet测试http会话:因为开启了长连接,所以请求完没断开连接,可以接着请求资源

技术分享

3.MPM:多道处理模块

prefork:多进程模型,每个进程响应一个请求;
    一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
worker:多线程模型,每个线程响应一个请求;
    一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
    m进程,n线程:m*n                    
event:事件驱动模型,每个线程响应n个请求;
    一个主进程:生成m个子进程,每个进程直接n个请求;
    m*n

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持;确认方法:

技术分享

更改默认使用的MPM:

技术分享

发现了httpd.worker和httpd.event程序,默认启动的是httpd,也就是prefork模型

技术分享

httpd.conf配置文件中定义的MPM属性:

对于prefork模型:

StartServers       8    启动httpd时启动多少个进程
MinSpareServers    5    最少空闲进程数
MaxSpareServers   20    最大空闲进程数
ServerLimit      256    限定最多允许并发进来的活动用户连接个数
MaxClients       256    最多允许启动多少个进程
MaxRequestsPerChild  4000 一个进程最多响应多少个请求

技术分享

对于worker模型:

StartServers         4  启动httpd时启动多少线程
MaxClients         300  最多允许启动多少个线程(最大并发请求数)
MinSpareThreads     25  最小的空闲线程数
MaxSpareThreads     75  最大的空闲线程数
ThreadsPerChild     25  允许每个进程最多生成多少个线程
MaxRequestsPerChild  0  设置一个独立的子进程将能处理的请求数量

技术分享

4.查看httpd的模块:

静态编译进httpd的模块

技术分享

event程序的:

技术分享

查看静态编译及动态装载的已在当前服务上被装载了的模块

技术分享

5.pv和uv:

PV(访问量):PV反映的是浏览某网站的页面数,所以每刷新一次也算一次。就是说PV与来访者的数量成正比,但PV并不是页面的来访者数量,而是网站被访问的页面数量。

UV(独立访客):可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。

6.DSO机制:

配置指令实现模块加载
    LoadModule <mod_name> <mod_path>
模块路径可使用相对地址
    相对于ServerRoot(/etc/httpd)指向的路径而言;
    /etc/httpd/modules/

技术分享

7.定义‘Main‘ server的文档页面路径
文档路径映射:
    DocumentRoot指向的路径为URL路径的起始位置;
    DocumentRoot "/var/www/html"
    /var/www/html/test/index.html --> http://HOST:PORT/test/index.html

8.站点访问控制
    可基于两种类型的路径指明对哪些资源进行访问控制
    文件系统路径:
        <Directory ""> </Direcotry>
        <File ""> </File>
        <FileMatch ""> </FileMatch>
    URL路径:
        <Location ""> </Location>

        可以限定对于那种方法进行控制,下面列举了http协议中的方法类型

    方法类型:

        PUT:获取文件从服务器

        DELETE:删除文件从服务器

        POST:提交超文本数据到服务器

        GET:获得超文本展示在浏览器

        HEAD:请求时只返回首部,不返回内容

    访问控制机制:
        基于来源地址;
        基于账号;


9.Directory中“基于来源地址”实现访问控制
(1) Options
    所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    None, All
    Indexes: 索引;允许显示索引,如果输入的url下找不到可用网页,是否显示所有目录,不安全,生产环境应该            关闭,但是下载站常用    

    FollowSymlinks:允许跟踪符号链接文件;

    SymLinksifOwnerMatch允许符号链接,但是检查进程属主是否有权限

    MultiViews根据客户端浏览器语言环境判断显示网页应该哪种语言,性能差,不建议打开  

    AllowOverride 访问控制是否允许当前配置覆盖指定网页目录.htaccess定义的访问控制机制

(2) 基于来源地址的访问控制机制
    Order:检查次序
    Order allow,deny

    Deny from

    Order deny,allow
    Allow from
    来源地址:
    IP ADDR
    NetAddr:
    172.16
    172.16.0.0
    172.16.0.0/16
    172.16.0.0/255.255.0.0

10.定义默认主页面
    DirecotryIndex index.html index.html.var

11.日志设定
    错误日志:
    ErrorLog logs/error_log
    LogLevel warn
    debug, info, notice, warn, error, crit, alert, emerg
    访问日志:
    CustomLog logs/access_log combined
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        %h:客户端IP地址;
        %l: Remote logname (from identd, if supplied). -表示为空;
        %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: 响应报文的大小,单位是字节,不包括响应报文首部;
        %{Referer}i:请求报文当中"referer"首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;
        %{User-Agent}i:请求报文当中"User-Agent"首部的值;即发出请求用到的应用程序;
        详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

技术分享


本文出自 “明天过后” 博客,请务必保留此出处http://leeyan.blog.51cto.com/8379003/1696347

httpd详解

标签:httpd   mpm   dso   

原文地址:http://leeyan.blog.51cto.com/8379003/1696347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!