20150924 Web Server(Http服务)

第一:Web Service基础

@1:补充  TCP、UDP

OSI模型,TCP(应用、表示、会话)资源子网,下四具为通信子网。

前三层在用户进程进行(用户空间用户程序,后四层在内核中。

Ip地址主机至主机(通信双方)

数据链路层mac设备到设备之间的通信

TCP/IP提供进程地址(端口号)

TCP:面向链接在通信前创建虚拟链路(三次握手),通信完成后

还要拆除链路。可提供可靠流协议。0-65535

UDP:用户数据报协议(User dataGram Protocol),无链接协议(

无法保证对方在线)0-65535

套接字socket:IPC的一种实现。目的实现允许不同主机(或同一主机)

上不同进程之间通信。从而实现数据交换。socket API,在1983年实现。

最早4.2BSD版本。是IP地址加端口的组合的结果。

源端口16位,目标端口16位

套接字三种类似:TCP端口的、UDP端口的以有裸套接字(直接通过IP报文)

不使用TCP或UDP端口。

SOCK_STREAM   TCP套接字 流行通信

SOCK_DGRAM   UDP套接字

SOCK_RAW   裸套接字(IP报文实现应用)

二个主机通信时同层之间有协议,不同层之间上层利用下提供的接口和服务,

下层接口向上层提供服务。多层能够提供模块化

网络IP,将IP切为数据报文进行传送。(为不可靠),传输单元MTU一般

为1500。

客户端与服务器进程通信时产生一组套接字(原I地址+原端口和目标地址+目标端口形式)

客户端的端口随机41952以上,服务器端固定80(http服务)

@2:IP

分类:

A类:1-127     B:128-191     C:192-223     D:组播:224-239     E:240-254

私有地址:

A:10.0.0.0/8    B:172.16.0.0/16—172.31.0.0/16

C:192.168.0.0/24      D:192.168.255.0/24

@3:端口使用限制

由国际互联网地址IANA

0-1024分配给固定使用   22/tcp(ssh) 80/tcp(http),443/tcp(https)

2014-41951  为注册端口,要求不严格,分配给程序注册使用

11211/tcp memory cached    3306 tcp/mysql)

41952-65535 客户端随机使用端口(动态端口),在Linux中

/proc/sys/net/ipv4/ip_local_port_range  可修改(增加端口数)

@3 :TCP协议特性(双向)

tcp发送与接收在不同的信道。(内核的接收速度大于网卡)

一端的发送缓存对应另一端的接收缓冲。TCP功能

三次握手

分段每段有校验和(CRC-32)。

确认、重传、超时、排序(逻辑序号-在数据流中的位置)、

流控(滑动窗口算法-缓存区剩余大小)、

拥塞控制(发送慢启动和拥塞避免算法)【接收的绥中小于发送缓存】

@4:Socket Domain:

根据使用地址使用socket domain,每类套接字至少提供2种socket:流、数据报

AF_INET :Adress Famil .IPV4

AF_INET6: IP V6

AF_UNIX:同一主机不同进程

流提供可靠传递、面向连接、无边界

数据报:不可靠传递,有边界、无连

套接字相关系统调用

socket():创建(向内核申请调用)

bind():绑定,使用套接字

Listen():监听

Accept():接收请求

connect():客户端请求链接建立

write();数据包的发送  read();从缓存接收数据

(send(),recv(),sendto(),recvfrom():

当无请求调用时,将阻塞

第二部分:http协议

第一:HTTP基础

1、 定义

http: hyper text transfer protocol, 80/tcp
     html: 编程语言,超文本标记语言;

<html>
   <head>
     <title>TITLE</title>
   </head>
     <body>
       <h1></h1>

blabla... <a href="http://www.magedu.com/logo.jpg"> blabla

<h2></h2>
    </body>
   </html>

CSS: Cascading Style Sheet(级联样式表)
  js: javascript

MIME: Multipurpose Internet Mail Extesion(支持文协议发送非文本数据,支持多)

http工作在应用层

2、工作机制:
   http请求
   http响应

Web资源:web resource(请求的内容)
       静态文件:.jpg, .gif, .html, .txt, .js, .css, .mp3, .avi
       动态文件:.php, .jsp,

媒体:媒体类型解决需要那个外部程序执行。
        媒体类型(MIME类型,不同编码方式):major/minor(主类型、次类型)
           text/html(超文本)
           text/plain(纯文本)
           image/jpeg
           image/gif

URI: Uniform Resource Identifier(统一资源标识符,标识可被引用的资源)

URI的二种类型:
     URL: Uniform Resorce Locator,用于描述某服务器某特定资源的位置;

(统一资源定位符)
        URL组成: Scheme://Server:Port/path/to/resource

scheme:方案   server:port(代表进程地址),path做资源映射。
         例如:http://www.magedu.com/images/logo.jpg
     URN: Uniform Resource Naming(统一资源命名)

3、http协议版本:
   HTTP/0.9:原型版本,功能简陋
   HTTP/1.0:第一个广泛使用的版本,支持MIME
   HTTP/1.1: 增强了缓存功能
      spdy(google)
   HTTP/2.0:

rfc(请求注解文档)

4、一次完整的http请求处理过程:


  (1) 建立或处理连接:接收请求或拒绝请求
  (2) 接收请求:【请求报文】
      接收来自于网络的请求报文中对某资源的一次请求的过程;

并发访问响应模型(Web I/O):
      单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;

多个请求被串行响应;(一个用户请求一个PV)
     多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
      复用I/O结构:使用复用连接处理器(C10K--1万个并发),一个进程响应n个请求;
           多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;
           事件驱动:event-driven:一个进程有事件监控器,能够接受多个请求。

基于事件回调机制。
     复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;

四个响应模型如下图:


(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

元数据:请求报文首部(包括很多元数据)
          <method> <URL> <VERSION>  #方法类似put、get
          Host: www.magedu.com   请求的主机名称
          Connection:

(4) 访问资源:获取请求报文中请求的资源

web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,

或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为

DocRoot(实现映射 httpd默认 /var/www/html /)

images/1.jpg

外部路径:http://www.magedu.com/images/1.jpg

web服务器资源路径映射方式:
          (a) docroot  直接映射,
          (b) alias  路径别名
          (c) 虚拟主机docroot   
          (d) 用户家目录docroot

(5) 构建响应报文:把访问到的资源打包,构建响应相应报文,再发给客户端

资源的MIME类型:
     显式分类:类型在服务器直接定义完成
     魔法分类 :判断类型
     协商分类:

URL重定向:(永久重定向、临时重定向)
     web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;

(6) 发送响应报文:

持久:不会断开请求链接

非持久:断开链接,再3次握手和4次断开

(7) 记录日志:供后期分析

第二、http介绍

1、 http服务器程序:
    httpd (apache)  
    nginx 
    lighttpd

应用程序服务器:
      IIS
      tomcat, jetty, jboss, resin
      webshpere, weblogic, oc4j(oracle)

www.netcraft.com(进行相应统计份额)

2、httpd的安装配置和使用:
httpd: apache
      a  patchy server = apache  (充满补丁的服务器)
     ASF: apache software foundation

----该组织其它应用:tomcat、spark

httpd的特性:
    高度模块化:core + modules
    DSO: Dynamic Shared Object(模块动态加载、卸载)
    MPM:Multipath Processing Modules(多路处理模块)
         prefork:多进程模型,每个进程响应一个请求;
            一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;

即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

每个进程连接的套接字,一个端口一个进程。
        worker:多线程模型,每个线程响应一个请求;
            一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
m进程,n线程:m*n                    
         event:事件驱动模型,每个线程响应n个请求;
      一个主进程:生成m个子进程,每个进程直接n个请求; m*n

httpd-2.2: event为测试使用
        httpd-.24:event可生产使用

3、httpd的功能特性:
  虚拟主机
          IP、Port、FQDN
  CGI:Common Gateway Interface,通用网关接口;
   反向代理
   负载均衡
   路径别名
  丰富的用户认证机制
        basic
        digest   摘要认证:file  mysql等
        支持第三方模块

4、安装httpd:  (httpd.apache.org官方站点)

rpm包
     源码编译安装

yum list all httpd*  显示httpd版本

第三部分: httpd安装
1、回顾:
    MPM:(多路处理模块)
        prefork: 多进程模型,每个进程响应一个请求;
        worker:多线程模型,第个线程响应一个请求;
        event:事件驱动模型,一个线程响应多个请求;

并发服务器响应请求:
        单进程I/O模型
        多进程I/O模型
        复用的I/O模型
            多线程模型
            事件驱动
        复用的多进程I/O模型

httpd的基本配置和应用(2)

httpd.apache.org
        2.2
        2.4

2、http安装

利用yum list all httpd*,查看以安装安装包

rpm –ql httpd-tools查看安装包配置的相就应包

rpm包安装的httpd的默认工作目录(根目录):/etc/httpd

程序环境 
    配置文件: 
        主配置文件:/etc/httpd/conf/httpd.conf 
        分段配置文件:/etc/httpd/conf.d/*.conf
    服务脚本:
         /etc/rc.d/init.d/httpd (在centos 7无此目录,通过systemctl进行管理)
         脚本的配置文件:/etc/sysconfig/httpd
     模块文件目录: 实际为链接
         /etc/httpd/modules --> /usr/lib64/httpd/modules


    主程序文件: rpm –ql httpd |grep bin

centos 6主程序文件:
          /usr/sbin/httpd (prefork)
          /usr/sbin/httpd.worker (worker) 
         /usr/sbin/httpd.event (event)

centos 7主程序文件:


    日志文件目录:
          /var/log/httpd
             access_log: 访问日志文件
             error_log: 错误日志
     站点文档目录:
           /var/www/html

启动systemctl start httpd(在启动前注意DNS解析)

通过查看/var/log/httpd/目录下的error_log以及ss –tnl查看80端口,

并通过浏览器查看

欢迎页/etc/httpd/conf.d目录中welcome.conf(默认)

/var/www/html htm为网页文件根目录

同时通过tail /var/log/httpd/access_log查看访问目录

第四部分;httpd配置

配置文件: 
    Directive     Value    (Directive不区分大小写)
    指令         值

# grep "Section" httpd.conf 
    ### Section 1: Global Environment 
    ### Section 2: ‘Main‘ server configuration 
    ### Section 3: Virtual Hosts

‘Main‘ server((主服务器-中型主机)和Virtual Hosts不能同时启用;

默认启用的是‘Main‘ server;

1、指定监听地址和端口 
     Listen [IP:]80   #修改完成后需要重新启动

(1) IP省略时表示监听本机上所有可用的IP地址; 
    (2) Listen指令可以出现多次,用于指明多个不同的监听端口或套接字: 
         Listen 172.16.100.11:80 
         Listen 172.16.100.11:8080

2、持久连接相关

持久连接:连接建立后,每个资源获取结束不会断开连接,而继续等待其它资源请求并完成传输; 
        如何断开? 
               数量限制:如100个 
               时间限制:如60秒 
        劣势:对并发访问量较大的服务器,开持久连接会有些请求得不到服务; 
        改进:减短,httpd-2.4支持毫秒级 
  非持久连接:每个资源都是单独通过专用的连接进行获取

KeepAlive Off|On 
   MaxKeepAliveRequests 100 
   KeepAliveTimeout 15

#默认情况 下以上参数在centos 6环境,7中需要单独配置

测试: (http请求谁请求谁断开)
# telnet Server 80 
      GET /URL HTTP/1.1 
       Host: Server  (回车二次)

结尾:connection closed 说明是非持久链接

3、MPM 
  多路处理模块:并发请求响应的不同实现 
      prefork, worker, event

httpd-2.2 不支持同时编译多个不同的MPM,rpm安装的httpd-2.2提供了

三个文件分别用于实现提供对不同的MPM的支持;确认方法: 
  # ps aux | grep httpd

默认为/usr/sbin/httpd,其为prefork; 
     查看模块列表: 
        httpd -l: 查看静态编译的模块 
        httpd -M: 查看所有模块,包括静态编译和DSO模块

静态编译说明 已编译进程序,共同可动态装卸载
        httpd -t -D DUMP_MODULES  与上相同

更换支持不同的MPM的主程序: (以下参数在centos 6版本中)

编辑/etc/sysconfig/httpd

修改参考如下:

在centos 7版本中已忽略

centos7 :/etc/httpd/conf.modules.d/00-mpm.conf


  启用变量:HTTPD

# prefork MPM 
  # StartServers: number of server processes to start 
  # MinSpareServers: minimum number of server processes which are kept spare 
  # MaxSpareServers: maximum number of server processes which are kept spare 
  # ServerLimit: maximum value for MaxClients for the lifetime of the server 
  # MaxClients: maximum number of server processes allowed to start 
  # MaxRequestsPerChild: maximum number of requests a server process serves 
      <IfModule prefork.c> 
         StartServers       8  #默认启动空闲进程  root为主,apach为子进程


         MinSpareServers    5   #最少空闲进程
         MaxSpareServers   20   #最大空闲进程
         ServerLimit      256   # 最大多少进程响应客户请求
         MaxClients       256   #最大客户端并发请求
         MaxRequestsPerChild  4000  # 每个子进程最大请求数量
       </IfModule>

# worker MPM   三级:子进程、线程  、
  # StartServers: initial number of server processes to start 
  # MaxClients: maximum number of simultaneous client connections 
  # MinSpareThreads: minimum number of worker threads which are kept spare 
  # MaxSpareThreads: maximum number of worker threads which are kept spare 
  # ThreadsPerChild: constant number of worker threads in each server process 
  # MaxRequestsPerChild: maximum number of requests a server process serves 
     <IfModule worker.c> 
        StartServers         4  #多少个子进程
        MaxClients         300 
        MinSpareThreads     25 #最少空闲线程数
        MaxSpareThreads     75 
        ThreadsPerChild     25  #每个子进程多少个线程
        MaxRequestsPerChild  0   #每个子进程最大请求数量 、无限制
      </IfModule>

4、DSO 【动态装卸模块】
    配置指令模块加载: 
        LoadModule <module_name> <module_path>

#以centos 6文件中修改httpd.conf文件添加注释即可, 以centos 7环境中

模块路径:可使用相对路径 
       相对于ServerRoot指令指向的位置而言;(ServerRoot定义起始位置/etc/httpd)

注意:建议使用service httpd reload重新装载配置文件(针对centos 6)

5、定义‘Main‘ server的文档页面路径 (方法适用于centos 6)

默认/var/www/html/

mkdir /data/web/html -pv

httpd -t语法测试
   DocumentRoot指令

文档路径映射: 
    DocumentRoot指向的路径为URL起始的位置 
        /var/www/html/images/1.jpg 
        http://server/images/1.jpg

6、站点路径访问控制 
访问控制机制: 
     基于来源地址 
     基于账号

定义的方式有两种: 
   文件系统路径: 
     <Directory "/PATH/TO/SOMEDIR"> 
             ... 
    </Directory>


    URL路径: 
           <Location "/URL"> 
                   ... 
           </Location>

7、Directory中的访问控制定义

修改/etc/httpd/conf/httpd.conf
   (1) Options 
   Indexes: 当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,

会将此路径下的所有资源以列表呈现给用户;非常危险,不建议使用; 
   FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其它文

件时,将直接显示目标文件的内容; 
   None: none   所有特性都不启用
   All: 所有的都启用;

alloverride Node 影响性能比较严重

(2) 基于来源地址访问控制

参考centos 6

Order: 检查次序 
    Order Allow Deny:只有明确Allow的来源地址,才允许访问,其它的均为Deny 
    Order Deny Allow: 
    Allow from:允许访问的来源地址 
    Deny from:拒绝访问的来源地址

示例:只允许allow的地址,拒绝100.2

Order Allow Deny 
        Deny from 172.16.100.2 
        Allow from 172.16.0.0/16

访问本机页面curl命令用于获取 html的资源

from后可跟上的地址格式: 
          IP地址; 
          网络地址: 
                  172.16   #网段
                  172.16.0.0    #网段
                  172.16.0.0/16   #网段
                  172.16.0.0/255.255.0.0  #网段

8、定义默认的主页面 
  DirectoryIndex index.html index.html.var

自左而右,找到首次匹配到的文件;就将其做为默认主页面返回。

示例:在DirectoryIndex 后面添加相应的html页面地址

9、配置日志

二类为错误日志和访问日志

错误日志: 相对路径: /etc/httpd/目录
       ErrorLog    logs/error_log 
       LogLevel warn(日志级别)alert :比这个warn级别的都会记录

访问日志:要定义日志格式  :使用logformat命令;后面为内置宏

log日志三种格式【combinded、common、combinedio】

参考链接:http://httpd.apache.org/docs/
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
     CustomLog logs/access_log combined

日志:tail /var/log/httpd/access_log

%h: Remote host,客户端主机 ,相对服务器来说 
   %l: Remote logname (from identd, if supplied). 客户用户通过identd登录时使用名称;一般为空-;  
   %u: Remote user (from auth; may be bogus if return status (%s) is 401),用户认证登录

的名字;无登录机制一般-;  
   %t: Time the request was received (standard english format),收到客户端请求时的时间;  
           \": 显示引号本身,而不作为引用符号;  
   %r:First line of request,请求报文的首行     <method> <url> <version>  
  %>s:响应状态状态码 五位(1,2,3,4,5开头)
  %b: Size of response in bytes, excluding HTTP headers,响应报文的大小,单位为字节

;不包含首部信息;  
  %{Referer}i:记录Http首部Referer对应的值;即访问入口,从哪个页面跳转至此页面;

如直接指定登陆时记录为空。
  %{User-Agent}i:记录http首部User-Agent对应的值;即浏览器类型;

详情: http://httpd.apache.org/docs/2.4/mod/core.html#errorlogformat

10、路径别名

DocumentRoot "/var/www/html" 
        download 
             mp3 
               1.mp3 
             bbs 
               index.html 
                
   URL: http://www.magedu.com/download/mp3/1.mp3 
   URL: http://www.magedu.com/bbs/index.html

Alias /URL/ "/path/to/some_directory"

例如:Alias /bbs/ "/web/bbs/htdocs/"  把 BBS路径以 “/web/bbs
  URL: http://www.magedu.com/bbs/index.html --> /web/bbs/htdocs/index.html

Alias /images/ "/web/pics/" 
  URL: http://www.magedu.com/images/a.jgp --> /web/pics/a.jpg

Centos  6在/etc/httpd/conf/httpd.conf中alias中

Centos 7 参考

11、设定默认字符集 
      AddDefaultCharset UTF-8

常用字符集:GBK, GB2312, GB18030

12、基于用户的访问控制  
    质询: 
       WWW-Authenticate: 服务器用401状态拒绝客户端请求,说明需要用户提供用户名

和密码;弹出对话框;


    认证: 
        Authorization:客户端用户填入账号密码后再次发请求至服务器;认证通过,则请求授权;

示例:DocumentRoot "/var/www/html" 
              images  正常访问
              bbs    正常访问
              employee/  不允许访问

安全域:需要用户认证后方能访问的路径  
              应该有其名称,用于向用户通知此认证的原因等;

http协议支持的认证方式:  
          basic:基本  (明文)默认
              BASE64 
          digest:摘要

basic认证机制的实现 
      (1) 定义安全域

创建以下目录:
         <Directory "/data/web/html/employee">  
              Options None     #不启用前定义根目录
               AllowOverride None    #限制权限
               AuthType Basic  #认证类型
               AuthName "Employee Infomation, only for employee"  #提示信息
               AuthUserFile /etc/httpd/users/.htpasswd  #认证信息,需要自己创建
               Require user tom jerry  #针对一部分用户登陆

Require valid-user #与以上二选一

</Directory>     
                     
  Require valid-user: 所有位于AuthUserFile文件中定义的用户都允许登录;  
  Require user user1 user2 ...: 仅允许user1,user2等出现AuthUserFile

文件中定义的特定几个用户登录;

虚拟用户:即非系统用户;

(2) 提供用户的账号文件  
      htpasswd命令用于维护此文件

htpasswd [ -c ] [ -m ] [ -D ] passwdfile username  
           -c: 添加第一用户时创建此文件;  
           -m: 以md5格式加密用户密码存放;  
           -s: 以sha格式加密用户密码存放;  
           -D:删除指定用户

示例:接(1)创建/etc/httpd/users/,并生成文件

注意htpasswd第二时需要取消-c选项

(3) 组认证

<Directory "/data/web/html/employee">  
       Options None  
       AllowOverride None  
       AuthType Basic  
       AuthName "Employee Infomation, only for employee"  
       AuthUserFile /etc/httpd/users/.htpasswd  
       AuthGroupFile /etc/httpd/users/.htgroup  
        Require group GRP1 GRP2 ...  
   </Directory>

组文件:  
         每行定义一个组,格式  
          Grp_Name: User1 User2 ...   只要列出即可

示例:编辑/etc/httpd/users/.htgroup文件

httpd –t 检查语法

13、虚拟主机

一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现;

httpd三种类型的虚拟主机:  
           基于IP  
           基于Port  
           基于FQDN  :用户注册,并能解析域内的主机,主机名不能够相同

注意:得首先关闭‘Main‘ server  虚拟主机与Main Server不能同时存在
             方法:注释DocumentRoot指令即可;以下方法适用于centos 6环境中

定义虚拟主机的方法: 
         <VirtualHost "IP:PORT"> 
                ServerName   #可随意
                ServerAlias   #可选
                DocumentRoot  #必选
          </VirtualHost>

<VirtualHost *:80>   #表示所有80端口
                 ServerName www.a.com 
                 DocumentRoot /vhost/a.com/htdocs/ 
             </VirtualHost>

# mkidr –pv /vhost/{a.com,b.org}/htdocs

注意:大多数可用于全局或‘main‘ server中的指令,都可以定义有VirtualHost中;

示例1:基于IP

<VirtualHost 172.16.100.11:80> 
                 ServerName www.a.com 
                 DocumentRoot /vhost/a.com/htdocs/ 
             </VirtualHost>

同时编辑每个目录下index.html <h1>内容</h1>

<VirtualHost 172.16.100.21:80> 
                 ServerName www.b.org 
                 DocumentRoot /vhost/b.org/htdocs/ 
             </VirtualHost>

<VirtualHost 172.16.100.31:80> 
                 ServerName www.c.net 
                 DocumentRoot /vhost/c.net/htdocs/ 
              </VirtualHost>

注意:本机要配置上所有IP地址并能够用于通信;

示例2:基于Port 
          <VirtualHost 172.16.100.11:80> 
              ServerName www.a.com 
              DocumentRoot /vhost/a.com/htdocs/ 
          </VirtualHost>

<VirtualHost 172.16.100.11:808> 
               ServerName www.b.org 
               DocumentRoot /vhost/b.org/htdocs/ 
           </VirtualHost>

<VirtualHost 172.16.100.11:8080> 
               ServerName www.c.net 
                DocumentRoot /vhost/c.net/htdocs/ 
            </VirtualHost>

注意:httpd要监听这里指明的所有端口 
               Listen

示例3:混用IP和Port 
           <VirtualHost 172.16.100.11:80> 
                ServerName www.a.com 
                DocumentRoot /vhost/a.com/htdocs/ 
            </VirtualHost>

<VirtualHost 172.16.100.21:80> 
                ServerName www.b.org 
                DocumentRoot /vhost/b.org/htdocs/ 
            </VirtualHost>

<VirtualHost 172.16.100.11:8080> 
                ServerName www.c.net 
                 DocumentRoot /vhost/c.net/htdocs/ 
              </VirtualHost>

示例4:基于FQDN

必须需要启用:  NameVirtualHost 172.16.100.11:80

<VirtualHost 172.16.100.11:80> 
                ServerName www.a.com 
                 DocumentRoot /vhost/a.com/htdocs/ 
             </VirtualHost>

<VirtualHost 172.16.100.11:80> 
                 ServerName www.b.org 
                 DocumentRoot /vhost/b.org/htdocs/ 
             </VirtualHost>

<VirtualHost 172.16.100.11:80> 
                 ServerName www.c.net 
                 DocumentRoot /vhost/c.net/htdocs/ 
             </VirtualHost>

使用cur命令查看

注意:额外经常用于每个虚拟主机的配置有 
           ErrorLog 
           CustomLog 
           <Directory> 
           <Location> 
             ServerAlias

14、内置的status页面

<Location /server-status> 
           SetHandler server-status    #httpd内置程序,表示启动
              Order deny,allow  #启动程序
              Deny from all 
             Allow from 172.16.0.0/16 
      </Location>

示例:通过172.16.16.100.11/server-status 进行该部

15:Curl命令

Curl是基于URL语法在命令行方式式工作的文件传输工具,它支持FTP、

http https,telnet  dict File以及LDAP协议,CURL支持http的post,put

等方法,Ftp上传,kerberos认证,http上传、代理服务器,cookies、用户

名和密码认证,上传和下载文件断开续传、,http代理服务器管道(proxy tunneling),

甚至支持ipv6,socks5代理服务器中,通过http代理服务器上传文件到 FTP服务器。

curl常用 选项

-A/- -user –agent <string>设置用户代理发送给的服务器,模拟自己成为浏览器

模拟自己为chrome 40浏览器

-basic (使用http基本认证)  -u 指定用户名和密码

--tcp-nodelay 使用gcp_nodelay选项

-e/- - referer <URL> 来源地址

--cacert <file>  CA证书(SSL)  验证服务器端通过ssl

--compressed 要求返回是压缩的格式,gzip等格式返回

-H/- -header  <line>自定义头信息传给服务器

-I /- - head 只显示响应报文首部信息(红色为起始行)

--limit-rate <rate>设置传输速度

-u/- - user <user[Password]>设置服务器的用户和密码

-0/- - httpd1.0使用http 1.0 (零)

用户:curl [options] [url…]

TCP拥塞控制,Magle算法

其它工具:elinks(全屏浏览器) 用户网站测试

直接显示获取的内容  -dump不进行交互模式,而直接将URL

的内容输出到标准输出

16、 使用mod_deflate模块压缩页面优化传输速度

适应场景:

节约带宽,需要额外消耗CPU(有浏览器不支持)

压缩比的资源,如文本,(图片、流媒体不适合)

setoutputfilter  DEFLATE (setoutputfiler httpd内置)

可将以上文件加到配置文件中(不定义到virtualhost中)

#Mod_deflate configuration

测试命令


压缩格式

17、https

@1:基础

http over ssl=https  与http不同,是二进制、压缩的。利用443端口。

可通过ssl或tls进行加密传输

ssl:v3

tls:v1

https//   scheme

@2:SSL会话的简化过程

首先是TCP三次握手,这是https未参与

(1) 客户端发送可供选择的加密方式,并向服务器请求证书。

(2)服务器将证书,及选定的加密方式给客户端,把自己的给客户端

(3)客户端进行证书验证

如信任发证书的CA,验证证书来源的合法性,用CA的公钥解密签名。

如能解密是CA所发。

下一步验证证书的内容的合法性,完全性验证(md5)

下一步检查证书的有效期限

下一步证书是否已被吊销

最后证书中拥有者的名字,与访问的目标主机要一致。

(4)客户端生成临时 会话密钥(对称密钥),并使用服务端的公钥加密此数据

发给服务器(密钥交换),完成密钥交换。

(5)服务器用此密钥加密用户请求的资源,响应给客户端。

CRL证书吊销列表,X.509数字证书的版本,CA证书签发机构,PKI公钥基础设备

会话结束,先拆除SSL会话,断开后再断开TCP链接(四次断开) ,ssl基于IP地址创建。

所以单IP的主机只可以使用一个https主机

@3:配置httpd支持https

(1)服务器申请数字证书

示例:

测试:通过私有CA发证书

(a)创建私有CA (证书服务器172.100

(b)在服务器上创建证书签署请求(web服务器100.11)100.100

(C)CA签证   --100.37(签证服务器)100.104

创建私钥和自签证书

生成自签证书

数据证索引文件touch index.txt

echo 01 >serial序列号

经过以上部分CA自签证书创建完成

下一步完成应用的证书签署请求

注意这里openssl中不指定x509,在输入服务器要与解析一致。生成请求文件

注意二端配置请求一致

返回16.104,证书文件名一般为crt结尾,生成证书文件

生成完成后返回给服务器端使用。如果提示签名不一致。删除

/etc/httpd/ssl文件中内容。

(2)配置httpd支持使用SSL,及使用的证书

#yum –y install mod_ssl

配置文件:/etc/httpd/conf.d/ss.conf

DocumentRoot

ServerName

SSLCertificationFile

SSLCertificateKeyFile

httpd –M |grep ssl 查看未安装

利用 yum info mod_ssl并进行安装

rpm –ql mod_ssl

备份配置文件进行编辑


编辑servername以及相应的DocumentRoot/路径

示例

编辑证书密钥

配置完成重启https服务

(3)测试基于https访问相应的主机

openssl s_client [-connect host:port] [-verify depth] [-cert filename]

测试工具 openssl自带的s_client   -connect 那个服务器的那个端口。

-CAfile 指定CA证书位置。

Windows中将PEM文件扩展名修改为crt

18:httpd自带的工具程序

htpasswd : basic认证基于文件实现时,用到的账号密码文件

apachectl stop|start  :httpd自带的服务控制脚本

apxs  :yum install httpd-devel包:apache第三方扩展工具

rotatelogs:日志滚动工具(自动执行)

示例:access.log

access.log  access.1.log

access.log  access.1.log   access.2.log

suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行

ab:apache benchmark

19:http压力测试工具

ab:apache benchmark(模拟测试工具,无法模拟实际)

webbench(额外安装)

httP-Load(额外安装)

jmeter

loadrunner

tcpcopy(网易开发)

@1:ab :Apache HTTP server benchmarking tool

ab [options] URL

-c 并发:模拟多少个并发(并发峰值)

-n 多少个请求

-k 以持久连接模式测试

ulimited  -n #调整用户当前同时打开的文件时(内核默认有限制)

ab –n 1000 –c 10 http://www.a.com/rc.txt

concurrency level:并发级别

time taken for tests:测试时长

complete request:完成请求数

failed requests:

write error:

total transerered:总传输数据量(有开销)大于html transfer

html transfered:

requested per second:多少并发下1秒请求数

time per request:完成1000个请求时间

time per request:1000中每个请求的时间
  (一个并发一个套接字文件)

利用ulimit –n 3000(修改并发连接数量)

1000个请求,10个并发

第四部分:Http请求和响应报文

1、回顾:

httpd配置

Listen [IP:]Port

KeepAlived (On|off)

MPM(并发响应模型):prefork,worker,event

DSO:LoadModule     Httpd  -M

DocumentRoot(定义方法)

<Directory>

Options   Index   FollowSymLinks

Order

Allow  From

deny  From

< Loction>

DirectoryInex

ErrorLog

CustomLog(指定日志格式)---Logformat

%(Referer)i:引用referer首部的值。

Alias  /URL/    “/Path/to/somedir”   别名

基于用户访问控制

认证方法:basic,digest

Authtype basic

AuthName “”

authUserFile

AuthGroupfile

Require User

Require Group

Require valid-user

工具:htpasswd
   虚拟主机 :IP ,Port FQDN(由于http报文中包括主机)

2、http协议和httpd的配置

(一)URL

@1:url定义

URL统一资源定位符(Unifrom resource Locator)

组成:URL方案 :scheme

服务器地址:IP:port

资源路径:路径

http://www.magedu.com:80/bbs/index.php,

https://www.magedu.com:443/

http://,https://代表scheme,/bbs/index.php是资源路径

@2:URL基本语法

<scheme>://<user>: <password>@<host>: <port>/<path>;<params>?<query>#<frag>

params: 参数:类似表单的数据

示例:http://www.magedu.com/bbs/hello,gender=f (红标代表是参数,判断)

query:指名查询语句的查询条件

示例:http://www.magedu.com/bbs/item.php?user=tom&titil=abc

frag:片断,页面的标签位置

可以根据三种方法进行负载均衡判断

@3:相对URL(不完整,相对当前位置,一般用于同站点)

绝对URL(跨站使用)

(二)http协议

http:/0.9, http://1.0,http://1.1,http/2.0

1:http协议: 是无状态的(stateless)

服务器无法持续追踪访问者来源(利用cookie与session机制)

某客户端发送数据至服务端时,服务器将cookie部分数据给客户端

每个cookie有作用范围(每个服务器不同)

cookie(重--内容详细;轻--内容比较少)

session:服务器与客户端进程维护的微小数据结构,记录客户端在服务器访问行为

关联到cookie。

2:http事务:http一次请求和响应

请求;request报文       响应:response报文

@1:报文语法格式:

request报文(有统一类型,起始行不同)

<method><request-url><version>

<headers> #后面二个换行

<entity-body>

reponse报文

<version><status><reason-phrase原因短语》

<headers> #后二个换行

<entity-body>

说明:

method:请求方法,标准客户端希望服务器对资源执行的动作

常用:GET     HEAD   POST

version:  http://<major>.<minor>  示例 http://1.1

status:统一三位数字:响应状态码 如200-成功,301-重定向,302,404-失败无资源,

502--失败服务器故障, 标记请求过程中发生的情况。

reason-phrase:状态码所标记的简要描述

headers:请求或响应的报文包括任意个首部,每个首部都有首部名称,后面跟一个

冒号,面后跟上一个可选空格,接一个值。

entity-body(实体部分)有用的数据块,可能为空

1):http请求方法methord(客户端告诉服务器做什么)

Get:从服务器获取一个资源(安全)

HEAD:只从服务器获取文档的首部(有起始行) 、

Post:向服务器发送要处理的数据(放到请求报文的实体部分,提交给服务器端)

Put:与get相反,将请求主题存储在服务器(实体部分包括内容)

DELETE:请求删除服务器上指定的文档

TRACE:追踪请求到达服务器中间经过的代理服务器

OPTIONS:可以请求服务器返回资源支持的方法

协议分析:报文tcpdump,tshark,wireshark

2) status(状态)服务器告诉客户端请求状态信息;5种

1XX:100-102,额外信息提示

2XX:200-206,成功类信息

3XX:300-305 重定向

4XX: 400-415 错误类响应码(因客户端错误)

5XX:500-505 错误类信息:(因服务器端错误)

常用状态码:

200:成功,请求的所有数据通过响应报文的entity-body部分发送。OK

301:请求URL指向资源已经被删除,但响应报文中通过location指明了

资源现在所处的新位置。(永久重定向)move-permantly

302:与301相似,但在响应报文中通过location指明资源现在所处临时

新位置;Found

304:客户端发出条件式请求,但服务器上的资源未发曾发生改变,则通过

响应此响应状态码通知客户端:Not Modified(客户端资源问服务器是否改变)

401:需要输入账号和密码认证后访问资源.Unauthorized

403:请求被禁止:Forbidden

404:服务器无法找到客户端请求资源,Not found

500:服务器内部错误 Internel Server Error

502:代理服务器从后端服务器收到一条伪响应Bad gateway。

请求数据通过代理服务器访问相应的资源利用trace方法

3)Headers:

格式:

Name Values:

响应首部和请求首部信息

        

首部的分类:

通用首部

请求首部

响应首部

实体首部

扩展首部

第一类: 通用首部:(可用在请求和响应报文当中)

Data :请求和响应报文创建时间

connection:连接方式:keepalive持久连接 ,close

Via:报文经过的中间节点

Cache-control:控制缓存生效机制

Pragme:兼容http1.1版本

第二类:请求首部:

Accept:通知服务器客户端能够接收的媒体类型(MIME)

Accept-Charset:接受的字符集

Accept-Encoding:接受的编码格式如gzip

Accept-Language:接受的语言

Client-IP:

Host:请求的服务器的名称和端口号

Referer:包括当前正在请求的资源的上一级资源。

User-Agent:客户端代理,浏览器类型

条件式请求首部:

Expect: 期望发什么信息

If-Modified-Since:自从指定时间后请求资源是否发性过修改

If-Unmodfied-Sinace:相反

If-None-Mache:本地缓存中存储的文档的Etage(扩展标签)

是否与服务器文档中Etage不匹配

if-match:

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码

Cookie:客户端向服务器发送cookie

Cookie2:

代理请求首部

Proxy-Authorization:向代理服务器认证

第三类:响应首部

信息性:

age:有效期(响应持续时长)

server: 服务器的软件名称和版本

协商首部:某资源有多种表示方法时使用

Accept_Ranges:服务器接受范围类型

Vary:服务器查看的其它首部列表

安全响应首部:

set-cookie:向客户端设置cookie

set-cookie2:

www-authenticate:来自服务器的对客户端的质询认证表单

第四类:实体首部

提供实体内容的信息

Allow:列出对次实体可使用的请求方法

Location:告诉客户端实体位于何处(重定向时使用)

Content-Encoding:内容编码格式

Content-Language:内容语言

content-length:主体长度

Content-Location:实体真正的位置

Content-Range:实体字节范围

content-Type:主体的对象类型

提供缓存相关内容:

Etag:实体的扩展标签

expires 实体过期时间

Last-Modified最后 次修改的时间

时间: 2024-10-11 01:12:51

20150924 Web Server(Http服务)的相关文章

The web application you are attempting to access on this web server is currently unavailable.......

今天去服务器安装了个.net 4.0 framework(原本有1.0和2.0的),配置好站点后,选择版本为4.0,访问出错,错误代码如下 Server Application Unavailable The web application you are attempting to access on this web server is currently unavailable.  Please hit the "Refresh" button in your web brows

DICOM:剖析Orthanc中的Web Server,Mongoose之“连接请求触发的事件序列”(二)

背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Orthanc内嵌多种模块,数据库管理简单,且不依赖于第三方软件.因此通过剖析Orthanc源码可以学习到搭建DICOM系统中的各个环节,例如SQLite嵌入型数据库.GoogleLog日志库.DCMTK医学DICOM库,以及近期要介绍的开源Web Server,Mongoose. 题记: 近期计划参照官网剖

CSAPP Tiny web server源代码分析及搭建执行

1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议). 一个webclient(即浏览器)打开一个到server的因特网连接,而且请求某些内容.server响应所请求的内容,然后关闭连接.浏览器读取这些内容.并把它显示在屏幕上. 对于webclient和server而言.内容是与一个MIME类型相关的字节序列. 常见的MIME类型: MIME类型 描写叙述 text/html HTML页面 text/plain 无格式文本 ima

DICOM:剖析Orthanc中的Web Server,Mongoose之 Flag bit &amp; Event(三)

背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Orthanc内嵌多种模块,数据库管理简单,且不依赖于第三方软件.因此通过剖析Orthanc源码可以学习到搭建DICOM系统中的各个环节,例如SQLite嵌入型数据库.GoogleLog日志库.DCMTK医学DICOM库,以及近期要介绍的开源Web Server,Mongoose. 上一篇博文中简单的分析了M

python搭建web server

如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 HTTP 服务器.于是,你可以把你的目录和文件都以HTTP的方式展示出来.佻只需要干一件事情,那就是安装一个Python. 实际上来说,这是一个可以用来共享文件的非常有用的方式.实现一个微型的HTTP服务程序来说是很简单的事情,在Python下,只需要一个命令行.下面是这个命令行:(假设我们需要共享我们

【转】推荐介绍几款小巧的Web Server程序

原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家除了知道Apache.IIS之外,原来还有更多有趣的选择.主要介绍了:micro_httpd.mini_httpd.thttpd.lighttpd.shttpd 等无款小巧好用的httpd. [ micro_httpd - really small HTTP server] 特点:* 支持安全的 .

ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!

您有这样的牢骚么? 有一周没更新博客了,简单说下在干什么吧:主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的:时间上来说业务需求安排在6月最后一周上线,整个3周的时间,就本人一人负责,由于在这之前对接过另外一个公司接口,我已经搭建好了整体架构和提供给app端接口了,因此主要还是对接某公司接口而已,至于细节上的东西改改后台系统,调调数据格式应该就差不多了:就本人开发的熟练度来讲一周时间基本能搞定,其他剩余时间就测试,喝

Jexus-5.6.3使用详解、Jexus Web Server配置

一.Jexus Web Server配置 在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”. jws.conf 中至少有 SiteConfigDir 和 SiteLogDir 两行信息:SiteConfigDir=siteconf      #指的是存放网站配置文件放在siteconf这个文件夹中,可以使用基于jws.exe文件的相对路径SiteLogDir=log              #指的是jexus日志文件放在log这

Tomcat是怎么工作的(2) -- 动手实现山寨版的简单Web Server

本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都清楚这个基本事实,否则你也不会看到这个系列文章了. 基于Java的web server必然用到两个极其重要的类:java.net.Socket和java.net.ServerSocket,然后以HTTP消息进行交互. 1. HTTP协议简介(The Hypertext Transfer Protoc