webservice-httpd
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 http协议: http/0.9:原型版本; http/1.0:cache,MIME(multipupose internet Mail Extensions) method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS、... http/1.1:缓存功能大大增强 speedy:spdy http/2.0 80/tcp https协议: 443/tcp IANA: 0-1023:众所周知的,永久地分配给固定的应用使用;特权端口(仅root可用); 1024-41951:注册端口,但要求不是特别严格,分配给程序注册为某应用使用; 41952+:客户端程序使用的随机端口,动态端口,或称为私有端口;/proc/sys/net/ipv4/ip_local_port_range; BSD Socket:IPC一种实现,允许位于不同主机之上的进程之间互相通信的解决方案之一; Socket API: SOCK_STREAM:tcp套接字; SOCK_DGRAM:udp套接字; SOCK_RAW:裸套接字; 根据套按使用的地址格式: AF_INET:ipv4地址家族; AF_INET6:ipv6 AF_UNIX:Unix_sock; TCP Finite State Machine: TCP协议的特性: 建立连接:三次握手; 将数据打包成段:校验和(CRC32) 确认、重传及超时; 排序:逻辑序号; 流量控制:滑动窗口; 拥塞控制:慢启动及拥塞避免算法; http:hyper text tranfer protocol, 超文本传输协议; html:hyper text mark language,超文本标记语言; 工作模式:request/response 一次完整的http事务:请求<-->响应 web资源: 一个html文档; 一个图片; 一个mp3文件片断; ... URL:资源标识,用于描述服务器上某特定资源的位置; Uniform Resource Locator scheme://Server[:port]/PATH/TO/SOME_RESOURCE 资源的种类: 静态资源:.jpg,.gif,.png,.html,.txt,? 动态资源: 服务器端技术:.php,.jsp,... ????客户端技术:.js 一次完整的http请求的处理过程: (1) 建立或处理连接:接收请求或拒绝请求; (2) 接收请求:接收客户端发来的具体请求报文; (3) 处理请求:对请求报文进行解析; (4) 访问资源:通过存储IO获取用户请求的资源;? (5) 构建响应报文: (6) 发送响应报文 : (7) 记录于日志中 并发响应模型: 单进程I/O模型:串行响应; 多进程I/O模型:同时启动多个进程,每个进程响应一个请求; 复用的I/O模型:一个进程响应多个请求; 多线程模型:一个进程生成多个线程,每个线程响应一个请求; 事件驱动:一个进程直接响应多个请求;? 复用的多进程I/O结构:启动m个进程,每个进程生成n个线程,每个线程响应一个请求; 资源映射
????例如:/var.www/html/ ?DocumentRoot? ????images./logo.jpg ????web服务器的资源映射 ????(a)documentRoot ????(b)alias ????(c)虚拟主机的docroot ????(d)用户的docroot 请求的链接方式 ????保持连接:长连接 keepalive ????非保持连接:短连接
????时间: ????数量: http协议的实现: ????简单的基本http协议服务器:纯静态 ????httpd(apache) ????nginx ????lighttpd ????application server:动态服务器技术: ????IIS,tomcat,jetty,resin.. ????weblogic,websphere.jboss.glassfish,... httpd: ????www.netcraft.com 数据挖据网站 ????ASF:apache software foundation apache 软件基金会 ????Apache,a patchy server,httpd nsa研发项目 ????httpd特性: ????高度模块化设计:core+modules ????DSO:Dynamic share objects ????支持动态装载和卸载; ????MPM:multiPath processing modules 多路处理模块 ????经典三个模型 ????????prefork:一个主进程。多个子进程;一个进程响应一个请求 ????????????主进程:负责管理子进程;创建套接字; 接受用户请求,并派发给某子进程 ????????????子进程:处理请求,响应请求 ????????worker:(多复用的i/o多线程模型)多进程多线程模型;一个线程响应一个请求 ????????????主进程:负责管理子进程;创建套接字; 接受用户请求,并派发给某子进程 ????????????子进程:负责管理线程 ????????????线程:处理并响应请求 ????????event:事件驱动模型,多进程模型,每个进程响应多个请求; ????????????主进程:主进程:负责管理子进程;创建套接字; 接受用户请求,并派发给某子进程 ????????????子进程:处理并响应请求 httpd-2.2:event 为测试模型 ????????centos 6 MPM不支持DSO机制 httpd-2.4 production ready;支持DSO机制 ????centos 7 ????httpd的版本:httpd.apache.org ????httpd-1.3:官方停止维护 ????httpd-2.0: ????httpd-2.2: ????httpd-2.4: ????httpd的功能特性: ????CGI:common gateway interface 通用网关接口 ????虚拟主机:IP,PORT,HOSTNAME ????反向代理:模块实现 ????负载均衡:bytraffic,bybusiness,byrequest ????路径别名: ????丰富的用户认证: ????basic: ????digest: ????支持第三方模块 ????... ????安装httpd RPM包:CentOS base源 编译安装:定制新功能制作rpm包 ????CentOS6 :httpd-2.2 ????sysinit 脚本 ????/etc/rc.d/init.d/httpd ????程序环境: ????配置文件: ????????/etc/httd/conf/httpd.conf ????????/etc/httd/conf.d/*.conf ????程序文件 ????????/usr/sbin/httpd ????????/usr/sbin/httpd.worker ????????/usr/sbin/httpd.event ????脚本配置文件:/etc/sysconfig/httpd日志文件 ????????/var/log/httpd ????????access_log:访问日志(分析用户行为) ????????erro_log:错误日志 ????站点文档根目录 ????????/var/www/html(默认) ????模块文件路径: ?????/usr/lib64/httpd/modules ????系统启动 chkconfig --level 35 httpd on Centso7 httpd-2.4 ????systemd unit file: /usr/lib/systemd/system/httpd.service ????程序环境: ????配置文件: ????????/etc/httd/httpd.conf ????????/etc/httpd/conf.modules.d ????????/etc/httd/conf.d/*.conf ????程序文件 ????????/usr/sbin/httpd ????MPM支持DSO机制 ????日志文件 ????/var/log/httpd ????????access_log:访问日志 ????????erro_log:错误日志 ????站点文档根目录 ????????/var/www/html ????模块文件路径: ????????/usr/lib64/httpd/modules ????开机启动:systemctl ?enable httpd httpd(2) httpd-2.2的基础配置 ????????/etc/httpd?:ServerRoot ????????conf:配置文件?主配置文件conf/httpd.conf,conf.d/*conf ????logs:日志文件 ????modules:模块文件 ????主配置文件conf/httpd.conf ????directive vlaue(配置文件中的指令) ????directive:不区分大小写 ?ServerRoot ????value:除了路径之外不区分字符大小写 ???? ????Section1 Global Environment 全局配置 ????Section2' Main' server configuration 中心主服务器配置 ????Section3 ?Virtual Hosts虚拟主机配置 ????2,3不会同时使用 ????修改后生效: ????????reload:端口 ????????restart:修改监听地址 1.修改监听端口 ????Listen[ip:]PORT (1)可定义多次:(本机可用的IP) ????Listen80 ????Listen172.16.174.170:8080(一般为哪个地址对外通信) (2)省略IP,表示0.0.0.0 2.持久连接 ????persistent connection:tcp连接建立后,资源获取完成不会断开连接,而是 继续等待请求其他资源; ????如何断开? ????KeepAlive Off ? 改On ????数量限制:MaxKeepAliveRequests 100 ????时间限制 :KeepAliveTimeout 15
????请求测试: ????????telnet SERVER_IP PORT ????????GET /test.html ?HTTP/1.1 ????????Host:SERVER_IP ???? 3.MPM :multipath processing modules 多路处理模块 htpd-2.2的MPM机制不支持DSO机制,event未测试 默认支持prefork httpd:prefork ????????????????<IfModule prefork.c> ????????????????StartServers ? ? ? 8 ?预先生成空闲子进程 ????????????????MinSpareServers ? ?5??最小空闲进程 ????????????????MaxSpareServers ? 20 最大空闲进程 ????????????????ServerLimit ? ? ?256?? ????????????????MaxClients ? ? ? 256 ????????????????MaxRequestsPerChild ?4000 每个子进程响应的请求数 ????????????????</IfModule> httpd:worker:worker ????????????????<IfModule worker.c> ????????????????StartServers ? ? ? ? 4子进程 ????????????????MaxClients ? ? ? ? 300线程 ????????????????MinSpareThreads ? ? 25 ????????????????MaxSpareThreads ? ? 75 ????????????????ThreadsPerChild ? ? 25 ?线程 ????????????????MaxRequestsPerChild ?0 ? 不做限制 ????????????????</IfModule> httpd:event:event RPM -ql httpd | grep '/usr/sbin/httpd' 查看httpd模块列表 ????httpd -M ?static不支持动态装载 ????httpd -l 动态装载模块 ????httpworker -l ????/etc/sysconfig/httpd ????HTTPD=/usr/sbin/httpd|httpd.worker|httpd.event ????prefork ?预先生成空闲子进程 默认8个 ????80,500ms,256 ????512*86400/80=55w PV ????Page View ????UV:User View ????worker 三级结构 进程 子进程 线程 4.DSO LoadModules 指令: ????LoadModule Mod_Name modules/Module_File.so 相对路径:是相对于ServerRoot? ????server root "/etc/httpd" 5.'Main'Server ????定义一个主机的基本指令: ????ServerName:FQDN:PORT ????DocumentRoot ./var/www/html 6.站点资源访问控制机制 ????DocumentRoot "/var/www/html" 更改路径 /data/web ????基于文件系统进行 ????/var/www/html/admin/ ????<Directory "/PATH/TO/SOME_DIR"> 控制目录 ????</Directory> ????<File ""> 控制文件 ????</File> ????<FileMatch "PATTERN"> ????</FileMatch> ????例如:<Directory /> ?(相对于docroot) ????????????? ? Options FollowSymLinks ????????????? ? AllowOverride None ????????????? ?</Directory> ????基于url路径进行 ????????<Location "/PATH/TO/SOME_URL"> ????????</Location> ????????<LocationMatch "PATTERN"> ????????</LocationMatch> director 目录中的常用指令 (1)Options:用于定义资源站点显示方式;后跟以空白字符分割的选项列表 Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Indexes :允许索引。如果没有主页可以列出文件列表 followSymLinks:允许跟踪符号链接。允许访问连接文件的原文件 SymLinksifOwnerMatch:如果原文件的属主与连接文件的属主一致 ????????????????SymLinks ????ExecCGI:允许执行CGI脚本???? ????MultiViews:内容协商 ????Includes: ????Options None (2)AllowOverride ????httpd 允许各目录使用.htaccess文件实现单目录访问控制 ????????/data/web/ ????.htaccess ????Options FileInfo AuthConfig Limit ????admin.htaccess ????images.htaccess ????强烈建议:AllowOverride None (3)order和allow/deny from ????基于IP地址的访问控制 ????????order用于定义allow和deny的生效次序 ????????allow from IP/NETWORK/FQDN ????????deny from IP/NETWORK/fqdn ????来源地址格式 ????IP? ????NETADDR:172.16 ? 172.16.0.0 172.16.0.0/16 ?172.16.0.0 255.255.0.0FQDN ????DAMAIN ????????order allow,deny ????????Allow from 172.16.0.0/16 ????????Deny from 172.16.174.100 ????????Deny from all ????最佳匹配法则机制,:最小匹配生效 7.定义站点主页面 ????DirectoryIndex file1 file2 8,定义路径别名: ????DocumentRoot "/data/web" ????http://www.magedu.com/images/logo.jpg<--/data/web/images/logo.jpj ????Alias /URL/ ?"/PATH/TO/SOME_DIR/" ????Alias ?/Images/ ?"/webdata/pictures/"
????????alias指定的URL右侧的"/"相当于后面的路径右侧的"/" 9日志设定 ? ?错误日志: ????ErrorLog logs/error_log ????LogLevel warn ? ?访问日志: ????LogFormat:定义日志信息格式 ????CustomLog ?logs/access_log combined ????????????LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined ????????????LogFormat "%h %l %u %t "%r" %>s %b" common ????????????LogFormat "%{Referer}i -> %U" referer ????????????LogFormat "%{User-agent}i" agent ????????????""使用"要转义 ????????????格式 ????????????%hRemote host ????????????%lRemote logname (from identd,if supplied) ????????????%uRemote user (from auth; may be bogus if return status (%s) is 401) ????????????%tTime the request was received (standard english format) ????????????%rFirst line of request ????????????%sStatus. For requests that got internally redirected,this is the status of the *original* request --- %>s for the last. ????????????%bSize of response in bytes,excluding HTTP headers.? ????????????%{Foobar}iThe contents of Foobar: header line(s) in the request sent to the server. ? ? ? ?? 10,httpd-mannual ???? ????#yum install http-manual ????配置文件::/etc/httpd/conf.d/manual.conf ????#service httd reload? ????访问路径 ????http://SERVER_IP/manual/ ????例:http://172.16.174.170/manual/ ????11.基于用户的访问控制机制 ????认证质询: ???? ????www-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码; ????认证: ????Authorization:客户端填入账号和密码再次发送请求报文;认证ton通过,服务端发送响应请求资源; ????认证的两种方式 ????basic:明文 ????digest:消息摘要认证 ????虚拟账号:仅用于服务某的账号和密码; ????存储于何处(httpd要有相应的适配模块) ????文本文件 file ?dbm ????SQL数据库 ????ldap目录数据库 ????安全域:需要用户认证后能访问的资源集合;通常基于名称对其进行标识 ????basic认证的配置显示: ????<Directory ""> ????Options None ????AllowOverride None ? ? 12.虚拟主机 ????多个站点基于不同的信息进行标识 ????站点标识 ????IP相同,端口不同 ????IP不同,端口相同 ????FQDN不同 ????虚拟主机有三种实现方式 ????基于IP的虚拟主机 ????每个虚拟主机使用-独有的IP地址 ????基于PORTD的虚拟主机 ????每个虚拟主机使用一个独有的PORT ????局域FQDN虚拟主机 ????每个虚拟主机使用一个独有的FQDN ? ?注意:虚拟主机与"主服务器"不能同时使用; ? ??? ????基于FQDN的虚拟主机实例 ????NameVirtualHost 172.16.174.100:80 ???? ???????????????<VirtualHost 172.16.174.170:80> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |