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)
上一篇 2016-12-09 18:03
下一篇 2016-12-09 22:24

相关推荐

  • N28 第三周【1】:grep和文本处理工具的使用

    grep一些练习 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who |cut -d” ” -f1 |sort -u root 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last |cut -d” ” -f1|head -1 |…

    Linux干货 2017-12-19
  • shell脚本之until循环

    一、用until实现下列脚本 1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。 #!/bin/bash #author:jackCui #description:Find out if the sys…

    Linux干货 2016-08-18
  • Linux 基础入门(第一周)

    计算机组成,Linux发行版本,Linux基础命令

    Linux干货 2017-12-03
  • Sqlserver2012(主从复制)共享同步日志备份恢复

    SQL Server 2012相对于SQL Server 2008来说,无论是性能还是功能都有一个相当大的提高,甚至可以用“革命”来形容这一次升级。SQL Server 2012使 SQL Server 跻身于企业级数据库行列。在数据高可用性方面,SQL Se…

    Linux干货 2015-10-31
  • Linux发行版介绍

    一,Linux是什么?      Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统…

    2016-10-29
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07

评论列表(1条)

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

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