Web服务器概述

Web服务器也称WWW服务器,主要功能是提供网上信息浏览服务。WWW采用的是客户端/服务器端结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到客户端的机器上并显示出来。


首先介绍下Apache的主要特征都是有哪些呐?

1、可以运行上所有计算机平台;2、支持最新的HTTP1.1协议;3、简单而强有力的基于文件的配置;4、支持通用网关接口CGI;5、支持虚拟主机;6、支持HTTP认证;7.、集成Perl脚本的编程语言;8、集成的、具有可定制的服务器日志;9、支持安全Socket层(即ssl)【我在下一篇将要介绍】10、用户会话过程的跟踪能力;11、支持FastCGI、Java Servlets。

那么从这么多突出的特点来看,我们还有神魔理由放弃这个强大而且前途光明的WWW服务器软件呐?

下面我们先来安装Apache

  下面我们就开始漫漫征服Apache之旅,我会通过循序渐进的需求实例,一步步的学习使用Apache,我想我们会从入门到精通,当然这是需要有一个缓慢积淀的过程的。

Apache运行环境要求不高,它在有6-10MB硬盘空间和8MB RAM的linux操作系统上完美运行。




HTTP协议简介

 HTTP(HyperText Transfer Prototcol,超文本传输协议)是Internet上应用最为广泛的一种网络协议,所有的www文件都必须遵循这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

 HTTP事务:一个HTTP事务即客户端发出一个“HTTP请求”命令和服务器回复“HTTP响应”结果的过程。“HTTP请求”和“HTTP响应”均为格式化的数据块,它们被称作HTTP报文。

 HTTP方法:HTTP协议支持多个不同的请求命令,这些请求命令称作HTTP方法。每个HTTP请求报文都必须指定其请求方法,用于通知服务器进行什么样的响应动作。常见的HTTP方法有GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE等。

(1)OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可利用向web服务器发送“*”的请求来测试服务器的功能性。

(2)HEAD:这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

(3)GET:向特定的资源发送请求。

(4)POST:向指定的资源提交数据进行处理请求(比如提交表单等)。数据被包含在请求体中。这种请求可能会导致新的资源的建立或已有资源的修改。

(5)PUT:向指定资源位置上传其最新内容。

(6)DELETE:删除指定资源

(7)TRACE:回显服务器收到的请求。

 HTTP的响应码:HTTP服务器回应客户端状态码主要有一下几个:

   1xx: 信息性状态码,这一类状态码代表请求已被接受,需要继续处理。

    100:客户端应当继续发送请求。这个临时响应用来通知客户端部分请求已被接受请继续发送请求信息。

    101:服务器已经理解了客户端的请求,并将通知客户端采用不同的协议来完成这个请求。

   2xx: 成功状态码

    200:OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。

   3xx: 重定向状态码

    301:永久重定向,也就是说被请求的资源已永久移动到新位置; Location响应首部的值仍为当前URL,因此为隐藏重定向;

    302:临时重定向,也就是说请求的资源现在临时从不同的URL响应请求;又称显式重定向, Location响应首部的值为新的URL喔。

    304:Not Modified如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档中的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态吗。

    4xx: 客户端错误状态码

     404:Not Found请求失败,请求所希望得到的资源未被在服务器上发现,一般这个状态码被广泛应用于当前服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。

    5xx: 服务器端错误状态码

     500:Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

     502:Bad Gateway作为网关或者代理工作服务器尝试执行请求时从上游服务器接收到的无效响应。

     504:GatewayTimeout:作为网关或者代理服务器尝试执行请求时未能及时从上游服务器或者辅助服务器(比如DNS)收到响应。

 一次HTTP事务完成的过程:也就是一次web服务器的工作过程

     建立连接——接受或拒绝客户端连接请求;

  接收请求——通过网络读取HTTP请求报文;

  处理请求——解析请求报文并做出相应的动作;

  访问资源——访问请求报文中相关的资源;

  构建响应——使用正确的首部生成HTTP响应报文;

  发送响应——向客户端发送生成的响应报文;

  记录日志——当已经完成的HTTP事务记录进日志文件;

 目前的web服务器软件非常多,最流行的web服务器包含以下几种:

 Apache HTTP Server、nginx(轻量级,更多新技术)、lighttpd(轻量级)等等。

在接收和解释请求消息后,服务器返回一个HTTP响应消息。

下面是在error_logaccess_log ,日志消息里常见的一些代码所表达的意思。

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

1、状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

egHTTP/1.1 200 OK CRLF

                             apache 的日志  

 Apache的通用日志格式有两种,commoncombined     LogFormat

 "%h %l %u %t \"%r\" %>s %b" commonLog  Format

 "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

 %h  客户端IP

 %l   使用identd时才会有信息,一般情况下都是-

 %u  远程用户(从验证获取到的)

 %t   收到请求时的时间

 %r  请求的首行

 %s  服务器端返回的状态码

 %b  HTTP头以外的返回的字节数

 %{Referer}i  从那个页面链接跳转到的此页面

 %{User-agent}i  用户的User-Agent

522 # Set to one of:  On | Off | EMail

523 #

524 ServerSignature On    #网页出错时出现管理员邮箱,这里可以填上自己的邮箱#
633 DefaultIcon /icons/unknown.gif      #如果前面没有指名,在这里可以定义图标图片#

748 AddDefaultCharset UTF-8          #一般在中文页面易出现乱码,一般我们都注释掉#



怎样实现虚拟主机/虚拟站点这种效果类?

共有5类实现方式:

1、物理目录:自己申请的站点空间用不完,可以租出,建立物理目录,用物理目录名访问。

  案例:[root@Blue httpd]# cd /var/www/html

[root@Blue html]# mkdir blue

[root@Blue html]# cd blue

[root@Blue blue]# echo "big bang" >index.html

[root@Blue blue]# ll

total 8

-rw-r--r-- 1 root root 9 Aug 25 18:50 index.html

这时访问一下该目录:


2、虚拟目录

  这个比物理目录实现起来比较灵活,做一个例子来说明:主目录在哪都行,访问可用别 名

[root@Blue blue]# mkdir tomorrow

[root@Blue blue]# cd tomorrow

[root@Blue tomorrow]# echo "TomorrowS  welcome ++" >index.html

  在httpd.conf配置文件最后说明虚拟目录。

992 #</VirtualHost>

993 Alias /tomorrow  "/blue"

重启服务,浏览查看效果。

2、虚拟目录

  这个比物理目录实现起来比较灵活,做一个例子来说明:主目录在哪都行,访问可用别 名

[root@Blue blue]# mkdir tomorrow

[root@Blue blue]# cd tomorrow

[root@Blue tomorrow]# echo "TomorrowS  welcome ++" >index.html

  在httpd.conf配置文件最后说明虚拟目录。

992 #</VirtualHost>

993 Alias /tomorrow  "/blue"

重启服务,浏览查看效果。

现在我们想用虚拟目录实现http站点下载,并且使用ip/别名可访问。

[root@Blue tomorrow]# cp /etc/inittab ./  #复制几个目录供下载#

[root@Blue tomorrow]# cp /etc/passwd ./

[root@Blue tomorrow]# rm index.html

rm: remove regular file `index.html'? Y

root@Blue ~]# vim /etc/httpd/conf/httpd.conf

[root@Blue tomorrow]# service httpd restart

访问下载:

2、基于ip地址的虚拟主机

  特点: 多个ip地址 、多个fqdn  端口80、多个站点

192.168.1.120  www.blue.com   /var/www/html

192.168.1.121  tec.blue.com      /var/www/tec

192.168.1.122  mkt.blue.com     /var/www/mkt

...........

[root@Blue logs]# mkdir tec mkt

[root@Blue www]# echo "welcome to chian" >mkt/index.html

[root@Blue www]# echo "welcome to mkt " >mkt/index.html

然后在充当客户机的主机上的C:\Windows\System32\drivers\etc\hosts 文件中添加

     192.168.1.120   www.blue.com

     192.168.1.121   tec.blue.com

然后配置httpd文件。

重启服务,尝试访问。

现在查看一下日志:

我们用命令选择性查看,查看访问用户、目录等

[root@Blue logs]# awk '$9=121{print $1 $2 $3 $4 }' tec_access_log #访问主机、时间#

2、192.168.1.1--[27/Aug/2013:00:24:04

3、192.168.1.1--[27/Aug/2013:00:24:16

4、192.168.1.1--[27/Aug/2013:00:28:19

5、192.168.1.1--[27/Aug/2013:00:34:16

6、192.168.1.1--[27/Aug/2013:00:38:53

当然我们还可以查看更多。


4、基于端口的虚拟主机或虚拟站点

  它基于少量ip、少量名称、少量端口、多个站点、

  例如:192.168.1.120   www.blue.com  80 /90/100等端口访问到相应站点。

  80 /var/www/tec   90 /var/www/tec   100 /var/www/mkt

  但是我们等高速客户机这些部门对应的端口地址或添加链接在主站点:

   我们先来修改httpd的配置文件内容:

添加监听端口8090100。(一般换取大一些的,这些端口可能会被使用在其他的应用上)

就可以访问到了:(这里我没做成功)


5、基于主机头

少量ip、  多个名字、 端口只有80 ,也能实现多个站点的访问。(比较流行)

192.168.1,120     www.blue.com       /var/www/html

                 tec.blue,com         /var/www/tec

                 mkt.blue.com        /var/www/mkt

修改配置文件:

974 NameVirtualHost 192.168.1.120:80    #必须打开修改ip地址#

还有:

现在重启服务,尝试访问:

访问一下mkt市场部的虚拟站点:

那么我们的虚拟站点就做完了。