当前位置 : 主页 > 网页制作 > Nodejs >

webservice-httpd

来源:互联网 收集:自由互联 发布时间:2021-06-24
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用

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>

网友评论