加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice-httpd

发布时间:2020-12-16 22:08:15 所属栏目:安全 来源:网络整理
导读:HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next G

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态: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>
? ? ? ? ? ? ? ? ? ? ? ?ServerName user1.magedu.com
? ? ? ? ? ? ? ? ? ? ? ?DocumentRoot /data/vhosts/user1
? ? ? ? ? ? ? ? ? ? </VirtualHost>
? ? ? ? ? ? ? ? ? ? <VirtualHost 172.16.174.170:80>
? ? ? ? ? ? ? ? ? ? ? ? ServerName user2.magedu.com
? ? ? ? ? ? ? ? ? ? ? ? DocumentRoot /data/vhosts/user2
? ? ? ? ? ? ? ? ? ? </VirtualHost>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读