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

apache服务的原理解析

时间:2016-05-01 17:51:00      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:httpd基础知识

IANA:互联网地址分配机构

0-1023:众所周知,永久地分配给固定的应用使用,特权端口;

1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用;3306/tcp, 11211/tcp;

41952+:客户端程序随机使用的端口,动态端口,或私有端口;其范围定义

/proc/sys/net/ipv4/ip_local_port_range;

BSD Socket:IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信;

Socket API(封装了内核中的socket通信相关的系统调用)

SOCK_STREAM: tcp套接字

SOCK_DGRAM: UDP套接字

SOCK_RAW:raw套按字

根据套按字所使用的地址格式,Socket Domain:

AF_INET:Address Family,IPv4

AF_INET6:ipv6

AF_UNIX:同一主机上的不同进程间基于socket套接字通信使用的一种地址;Unix_SOCK

TCP FSM: CLOSED, LISTEN,SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIMEWAIT,  CLOSED

TCP协议的特性:

建立连接:三次握手;

将数据打包成段:校验和(CRC32)

确认、重传及超时;

排序:逻辑序号;

流量控制:滑动窗口算法;

拥塞控制:慢启动和拥塞避免算法;

http:hyper text transfer protocol超文本传输协议,是一种应用层协议, 端口是80/tcp,  文本协议

[扩展]

html:hyper text mark language, 编程语言,超文本标记语言;

<html>
	<head>
	<title>TITLE</title>
	</head>
	<body>
	    <h1></h1>
	    <p> blabla... <a href="http://www.magedu.com/download.html"> bla... </a> </p>
	    <h2>...</h2>
	</body>
</html>

css: Cascading Style Sheet

js:JavaScript, 客户端脚本;

http协议版本:

http/0.9:原型版本,功能简陋

http/1.0: cache, MIME, method,

MIME:Multipurpose Internet Mail Extesion

method:GET, POST, HEAD,PUT, DELETE,TRACE, OPTIONS

http/1.1:增强了缓存功能;

spdy

http/2.0:

rfc 

    工作模式:

     http请求报文:http request

     http响应报文: http response

一次http事务:请求<-->响应

技术分享

web资源:web resource

静态资源(无须服务端做出额外处理): .jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi

动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果): .php, .jsp

注意:一个页面中展示的资源可能有多个;每个资源都需要单独请求;


资源的标识机制:URL

Uniform Resource Locator统一资源定位符:用于描述服务器某特定资源的位置;

例如:  http://www.sina.com.cn/index.html

Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]


一次完整的http请求处理过程

(1) 建立或处理连接:接收请求或拒绝请求;

(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;

(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;

(4) 访问资源:获取请求报文中请求的资源;

(5) 构建响应报文:

(6) 发送响应报文:

(7) 记录日志:

接收请求的模型:

并发访问响应模型:

单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应;

多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

复用的I/O结构:一个进程响应n个请求;

多线程模式:一个进程生成n个线程,一个线程处理一个请求;

事件驱动(event-driven):一个进程直接n个请求;

复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程;

响应的请求的数量:m*n

处理请求:分析请求报文的http请求报文首部

http协议:

http请求报文首部 

http响应报文首部

请求报文首部的格式:

<method> <URL> <VERSION>

HEADERS: (name: value)

<request body>

访问资源:获取请求报文中请求的资源

web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径称为DocRoot;

/var/www/html/:

web服务器的资源路径映射方式:

(a) docroot 

(b) alias

(c) 虚拟主机的docroot

(d) 用户家目录的docroot 

http请求处理中的连接模式:

保持连接(长连接):keep-alive

时间:

数量:

非保持连接(短连接):

http服务器程序:

httpd (apache)

nginx

lighttpd(轻量级)

应用程序服务器:

IIS: .Net 都是微软的

tomcat: .jsp

httpd的安装和使用:

ASF: apache software foundation(apache软件基金会)

httpd:apache

a patchy server = apache

httpd

httpd的特性:

高度模块化: core + modules

DSO:dynamic shared object

MPM:Multipath processing Modules (多路处理模块)

prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

n个子进程:每个子进程处理一个请求;

工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;

worker:多进程多线程模型,每线程处理一个用户请求;

一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

多个子进程:每个子进程负责生成多个线程;

每个线程:负责响应用户请求;

并发响应数量:m*n

m:子进程数量

n:每个子进程所能创建的最大线程数量;

event:事件驱动模型,多进程模型,每个进程响应多个请求;

一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

子进程:基于事件驱动机制直接响应多个请求;

httpd-2.2: 仍为测试使用模型;

httpd-2.4:event可生产环境中使用;

httpd的功能特性:

  • CGI:Common Gateway Interface公共网管接口

  • 虚拟主机:IP,PORT, FQDN

  • 反向代理

  • 负载均衡

  • 路径别名

丰富的用户认证机制

    • basic 

    • digest

    • 支持第三方模块

安装httpd:

rpm包:CentOS 发行版中直接提供;

[root@server ~]# yum info httpd
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: mirrors.pubyun.com
 * extras: mirrors.btte.net
 * updates: mirrors.neusoft.edu.cn
Installed Packages
Name       : httpd
Arch       : x86_64
Version    : 2.2.15
Release    : 5.el6.centos
Size       : 2.9 M
Repo       : installed
From repo  : anaconda-CentOS-201106060106.x86_64
Summary    : Apache HTTP Server
URL        : http://httpd.apache.org/
License    : ASL 2.0
Description: The Apache HTTP Server is a powerful, efficient, and extensible
           : web server.

编译安装:定制新功能,或其它原因;

CentOS 6:httpd-2.2

[root@server ~]# rpm -ql httpd | less
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
/etc/logrotate.d/httpd
/etc/rc.d/init.d/httpd
/etc/sysconfig/httpd
/usr/lib64/httpd
/usr/lib64/httpd/modules
/usr/lib64/httpd/modules/mod_actions.so
/usr/lib64/httpd/modules/mod_alias.so
/usr/lib64/httpd/modules/mod_asis.so
/usr/lib64/httpd/modules/mod_auth_basic.so
/usr/lib64/httpd/modules/mod_auth_digest.so
/usr/lib64/httpd/modules/mod_authn_alias.so
/usr/lib64/httpd/modules/mod_authn_anon.so
/usr/lib64/httpd/modules/mod_authn_dbd.so
/usr/lib64/httpd/modules/mod_authn_dbm.so
/usr/lib64/httpd/modules/mod_authn_default.so
/usr/lib64/httpd/modules/mod_authn_file.so
/usr/lib64/httpd/modules/mod_authnz_ldap.so
/usr/lib64/httpd/modules/mod_authz_dbm.so
/usr/lib64/httpd/modules/mod_authz_default.so
/usr/lib64/httpd/modules/mod_authz_groupfile.so
/usr/lib64/httpd/modules/mod_authz_host.so
/usr/lib64/httpd/modules/mod_authz_owner.so
/usr/lib64/httpd/modules/mod_authz_user.so
/usr/lib64/httpd/modules/mod_autoindex.so
/usr/lib64/httpd/modules/mod_cache.so
/usr/lib64/httpd/modules/mod_cern_meta.so
/usr/lib64/httpd/modules/mod_cgi.so
/usr/lib64/httpd/modules/mod_cgid.so
/usr/lib64/httpd/modules/mod_dav.so
/usr/lib64/httpd/modules/mod_dav_fs.so
/usr/lib64/httpd/modules/mod_dbd.so

程序环境:

配置文件:

            /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

服务控制和启动:

chkconfig  httpd  on|off

service  {start|stop|restart|status|configtest|reload}  httpd

CentOS 7:httpd-2.4

[root@localhost named]# yum info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: 
 * extras: mirrors.aliyun.com
Available Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 40.el7.centos
Size        : 2.7 M
Repo        : base/7/x86_64
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

程序环境:

配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf

systemd unit file:

        /usr/lib/systemd/system/httpd.service

主程序文件:

/usr/sbin/httpd

httpd-2.4支持MPM的动态切换

日志文件:

/var/log/httpd:

access_log:访问日志

error_log:错误日志

站点文档:

    /var/www/html

模块文件路径:

    /usr/lib64/httpd/modules

服务控制:

systemctl  enable|disable  httpd.service

systemctl  {start|stop|restart|status}  httpd.service


本文出自 “Touch Dream” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1769329

apache服务的原理解析

标签:httpd基础知识

原文地址:http://xuelong.blog.51cto.com/10573089/1769329

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