web服务 初步

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连接:三次握手

客户端请求,服务端响应请求,客户端确认 web服务   初步

6、tcp断开:四次断开

客户端请求断开,服务器响应断开,服务器请求断开,客户端响应断开 web服务   初步

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}

web服务   初步

常用配置

常用配置大致先说一下:(所有的配置修改完后,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模型,要想配置其他模型,将注释去掉配置即可:

web服务   初步

配置内容如下:

StartServers 8
    设置服务器启动时的守护进程数
MinSpareServers 5
    设置如果有低于该值的空闲子进程,就创建一个新的子进程准备为客户提供服务
MaxSpareServers 20
    设置如果有高于该值的空闲子进程,就删除子进程来提高系统性能服务
ServerLimit 256
    设置服务器允许连接的最大同时连接数
MaxClients 256
    设置同一时间内客户端的最大连接数
MaxRequestsPerChild 4000
    设置限制每个子进程在结束处理请求之前提出的连接请求数量

4、DOS,不想用的注释掉,想用的启用(LoadModule)

web服务   初步

web服务   初步

5、定义‘Main’ Server的文档页面路径,你要编写中心主机的文档,可以放在这个下面,中心主机是对应一个站点,虚拟主机可以对应多个站点。 ———————————DocumentRoot "/var/www/html"

6、站点访问控制常见机制,就是设置哪些条件下可以访问,有两种机制,如下:

web服务   初步

web服务   初步

注意: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”的值;即发出请求的应用程序;

web服务   初步

11、基于用户的访问控制,与6做比较。IP地址控制访问,很简陋,容易有漏洞,别人伪装ip地址。

现在Document 指定的区域创建一个目录/var/www/html/admin

web服务   初步

创建账号密码文件

htpasswd -c -m /etc/httpd/conf/.htpasswd tom
    -c是第一次创建,不存在,则使用,存在就不用,会被覆盖

htpasswd  -m /etc/httpd/conf/.htpasswd jerry

web服务   初步

这里我输入了上面创建的tom

web服务   初步

同样也可以要求某一个组的用户进行访问。 <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

web服务   初步

b、创建目录

mkdir -pv /www/{a.com,b.net,c.org}/hdtocs

web服务   初步

c、编辑主配置文件

web服务   初步

web服务   初步

结果是这样子

web服务   初步


(2)基于端口

注意:Listen 8080

web服务   初步

测试结果如下

web服务   初步

(3)基于FQDN

注意:NameVirtualHost :192.168.1.119:80

web服务   初步

在windows上或者虚拟机上改hosts文件

web服务   初步

结果如下

web服务   初步

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/63103

(0)
N24_yeziN24_yezi
上一篇 2016-12-09
下一篇 2016-12-09

相关推荐

  • 8-4 作业

    1.用正则表达式表示IP地址 2.用正则表达式表示手机号11 13 17 15  18 3.用正则表达式表示身份证号18   4.用正则表达式表示邮箱  

    Linux干货 2016-08-08
  • 文件权限的设置和文件的特殊权限及其命令使用

    1. linux的系统管理员很重要的任务就是管理自己服务器的文件,对于权限设置等级森严的linux文件系统,文件系统的访问权限管理自然也是linux管理员必不可少的一项技能。 在linux中文件的基本权限中:被分为三大项:文件拥有者,文件拥有组,其他人。 每一项中,用三位八进制的数字来代表文件是否可读,是否可写,是否可执行。并根据用户不同可以设置不同的uma…

    Linux干货 2016-08-05
  • 图解Linux终端类型

    个人浅见 欢迎指正

    Linux干货 2016-10-16
  • Linux Bash Shell练习

    Linux Bash Shell练习 1、写一个脚本,完成以下功能: 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串 显示所有以S开头的文件的文件名,并且给其附加一个start字符串 分别统计S开头和K开头的文件各有多少 #!/bin/bash # for&…

    Linux干货 2016-12-17
  • 第一周学习总结

    俗话说,好记性不如烂笔头,在当今移动互联网横行的时代,烂笔头就是网络,而笔记本就是各种平台。 作为一个IT人,有人突然问你计算机是啥,你可能不会像学文科的人一样给他说,就是电脑啊。这时候就是凸显IT知识技能的时候了,那么我下面就给您慢慢的道来。 在1946年美籍匈牙利人冯·诺依曼首次提出了自己的计算机体系理论,简称冯·诺依曼体系,主要是说计算机由五大基本部件…

    2017-12-14
  • vim编辑器

    导读:      本章将主要介绍Linux中的一种常用文本编辑器vim,具体内容如下:       □使用vi和vim的三种主要模式       移动光标,进入插入模式       改变、删除、复制文本     &n…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-14 14:19

    tcp连接与tcp的断开可以使用文字来进行描述一下的。