Web Service初步
一、引言
Web服务也是一个C/S架构,服务器端就是一个进程,客户端是一个浏览器。我们打开浏览器的时候,都会看到hppt,https的字样,然后才是输入网址,这两个协议是web服务的应用层协议,用来实现某些具体应用的。像https,前面学习openssl的时候也接触过,https=http+ssl。
web的传输层协议用到了tcp协议,监听在80端口上。
dns的传输层协议用到了53/tcp(传输使用),53/udp(解析使用)
二、知识点
1、web
Web是一种超文本信息系统,主要实现方式是超文本链接,它使得文本不在像一本书一样是固定的、线性的,而是可以从一个位置跳转到另外一个位置。
2、http协议
http叫hyper text transfer protocol,超文本传输协议,提供了访问超文本信息的功能,是web浏览器和web服务器之间的应用层通信协议。web使用http协议传输各种超文本页面和数据。
3、html(超文本标记语言)
html可以供不同的计算机读取。html对web网页的内容、格式及web网页中的超级链接进行描述,而web浏览器的作用就在于读取web网站上的html文档。
4、web、http、html的关系。
web使用http协议传输超文本html页面和数据。
5、tcp连接:三次握手
客户端请求,服务端响应请求,客户端确认
6、tcp断开:四次断开
客户端请求断开,服务器响应断开,服务器请求断开,客户端响应断开
7、socket连接
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。简称C/S架构
套接字之间的连接过程分为三个步骤:服务器监听—->客户端请求—->连接确认。
8、一次完整的http请求处理过程
(1) 建立或处理连接:接收请求或拒绝请求;
(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
(4) 访问资源:获取请求报文中请求的资源;
(5) 构建响应报文:
(6) 发送响应报文:
(7) 记录日志:
9、接受请求的模型
并发访问响应模型: 单进程 I/O 模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应; 多进程 I/O 结构:并行启动多个进程,每个进程响应一个请求; 复用的 I/O 结构:一个进程响应 n 个请求; 多线程模式:一个进程生成 n 个线程,一个线程处理一个请求; 事件驱动(event-driven):一个进程直接 n 个请求; 复用的多进程 I/O 结构:启动多个(m)个进程,每个进程生成(n)个线程; 响应的请求的数量:m*n
10、web资源:
静态资源:客户端请求直接发给你,服务端不用做处理的:jpg,png,gif,html,txt等
动态资源:服务端需要通过执行程序处理的:php,jsp
一个页面会有多个资源,每个资源都要单独请求
11、http与tcp的联系
http是利用传输层协议tpc来建立连接的,每个资源的请求都要经过3次握手,4次断开才能实现。每个资源断开,后面的才能用。但是有些人不断开怎么办呢?这就要用到后面的配置文件了,在keep-alive上配置长连接还是短链接,长连接有多长,下面来看看配置文件。
三、基础配置文件
1、http特性
高度模块化:core+modules
DSO:动态共享(dynamic shared object),httpd -M,查看装载模块
MPM:多路处理模块
prefork:多进程模型,一个进程响应一个请求 一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理; n 个子进程:每个子进程处理一个请求; 工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲; worker:多进程多线程模型,每个线程处理一个请求 一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理; 多个子进程:每个子进程负责生成多个线程;每个线程:负责响应用户请求; 并发响应数量:m*n m:子进程数量 n:每个子进程所能创建的最大线程数量; event:事件驱动模型,多进程模型,每个进程响应多个请求 一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理; 子进程:基于事件驱动机制直接响应多个请求; httpd-2.2: 仍为测试使用模型; httpd-2.4:event 可生产环境中使用;
2、配置文件(以http-2.2为例,centos6上面)
一、主配置文件:/etc/httpd/conf/httpd.conf
配置之前先备份一份:cp -v httpd.conf{,.backup}
常用配置
常用配置大致先说一下:(所有的配置修改完后,httpd -t检查,然后restart或reload)
1、修改监听的IP 和 Port 端口 /Listen 2、定义长连接,短链接 /KeepAlive 3、MPM 4、DOS 5、定义‘Main’ Server的文档页面路径 DocumentRoot "/var/www/html" 6、站点访问控制常见机制 7、定义站点主页面 /DirectoryIndex 8、定义路径别名 /Alias 9、设定默认字符集 /AddDefaultCharset 10、日志设定 11、基于用户的访问控制 12、虚拟主机 13、status 页面
大致的记得有如上几个功能,下面挑一些比较重要与难理解的进行总结。其余的自行读阅英语文档,都好理解。
3、MPM:
前面也已经介绍过了,MPM是多路处理模块,包含三种类型
prefork:多进程模型,每个进程响应一个请求 worker:多进程多线程模型,每个线程处理一个请求 event:事件驱动模型,多进程模型,一个驱动可以响应多个请求。
现在,http-2.2版本没法同时编译这三个不同类型的模块,所以要选择使用哪一个模块进行请求处理。这时候就要用到主配置文件进行配置。其配置文件是在:
/etc/sysconfig/httpd
默认是prefork模型,要想配置其他模型,将注释去掉配置即可:
配置内容如下:
StartServers 8 设置服务器启动时的守护进程数 MinSpareServers 5 设置如果有低于该值的空闲子进程,就创建一个新的子进程准备为客户提供服务 MaxSpareServers 20 设置如果有高于该值的空闲子进程,就删除子进程来提高系统性能服务 ServerLimit 256 设置服务器允许连接的最大同时连接数 MaxClients 256 设置同一时间内客户端的最大连接数 MaxRequestsPerChild 4000 设置限制每个子进程在结束处理请求之前提出的连接请求数量
4、DOS,不想用的注释掉,想用的启用(LoadModule)
5、定义‘Main’ Server的文档页面路径,你要编写中心主机的文档,可以放在这个下面,中心主机是对应一个站点,虚拟主机可以对应多个站点。 ———————————DocumentRoot "/var/www/html"
6、站点访问控制常见机制,就是设置哪些条件下可以访问,有两种机制,如下:
注意:Indexes,默认启用,很危险,主动关掉。allow deny做白名单,deny allow 做黑名单。
8、定义路径别名,这个挺有用。
格式: Alias /URL/ "/PATH/TO/SOMEDIR/" DocumentRoot "/www/htdocs" 主战点存放路径,网页存放在这里面有效,其他都无效。 http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm 这个文件对应的网站存放在什么地方。 /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm Alias /download/ "/rpms/pub/"即为以download的起始文件都来自于/rpms/pub/路径下。 http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm /rpms/pub/bash-4.4.2-3.el6.x86_64.rpm http://www.magedu.com/images/logo.png /www/htdocs/images/logo.png
10、日志设定
日志类型:访问日志 和 错误日志 错误日志: ErrorLog logs/error_log LogLevel warn Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 访问日志: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog logs/access_log combined LogFormat format strings: http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats %h:客户端 IP 地址; %l:Remote User, 通常为一个减号(“-”); %u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号; %t:服务器收到请求时的时间; %r:First line of request,即表示请求报文的首行;记录了此次请求的 “方法”,“URL”以及协议版本; %>s:响应状态码; %b:响应报文的大小,单位是字节;不包括响应报文的 http 首部; %{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的; %{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;
11、基于用户的访问控制,与6做比较。IP地址控制访问,很简陋,容易有漏洞,别人伪装ip地址。
现在Document 指定的区域创建一个目录/var/www/html/admin
创建账号密码文件
htpasswd -c -m /etc/httpd/conf/.htpasswd tom -c是第一次创建,不存在,则使用,存在就不用,会被覆盖 htpasswd -m /etc/httpd/conf/.htpasswd jerry
这里我输入了上面创建的tom
同样也可以要求某一个组的用户进行访问。 <Directory ""> …… Require group grpname1 grpname2 … ……
创建用户账号和组账号文件; vim /etc/httpd/conf/.htgroup 自定义一行文件 组文件:每一行定义一个组 GRP_NAME: username1 username2 ...
12、虚拟主机(很重要)
中心主机只能为一个站点提供服务,即为你虚拟机的ip地址。要想为多个站点提供服务,应该怎么办呢,就用到虚拟主机。切记,虚拟主机跟中心主机不能混用,如果想要使用虚拟主机就将中心主机给注释掉DocumentRoot。下面有三种方式来实现
基于ip:ip很贵 基于端口:端口均为默认端口80 基于FQDN(域名):域名不同
(1)基于ip
a、注册需要的ip地址
ifconfig eth0:0 192.168.1.120/24 ifconfig eth0:1 192.168.1.121/24
b、创建目录
mkdir -pv /www/{a.com,b.net,c.org}/hdtocs
c、编辑主配置文件
结果是这样子
(2)基于端口
注意:Listen 8080
测试结果如下
(3)基于FQDN
注意:NameVirtualHost :192.168.1.119:80
在windows上或者虚拟机上改hosts文件
结果如下
原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/63103
评论列表(1条)
tcp连接与tcp的断开可以使用文字来进行描述一下的。