今天我来复习搭建web服务器的了,其实这个章节上周就该写出来复习笔记了,奈何自己虽然搭建起了简单的web服务器,但对其中很多概念依旧没搞懂,所以查资料,做实验等等耽搁了很多时间。Ok废话不多说,现在我就将我自己的学习进行一个总结,也欢迎大家给我指正我的不足之处。

一. 什么是web服务器
Web服务器也叫 www服务器,主要的功能是提供网上信息浏览服务。大家都知道目前网上最热的就是tcp/ip协议了吧,其实让其正儿八经热起来的正是mail和www,特别是www,不然也不会这么风靡全世界。
它起源于 1989年3月,由欧洲量子物理实验室 CERN(the European Laboratory for Particle Physics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。由于用户在通过 Web 浏览器访问信息资源的过程中,无需再关心一些技术性的细节,而且界面非常友好,因而 Web 在Internet 上一推出就受到了热烈的欢迎,走红全球,并迅速得到了爆炸性的发展。
www 服务器是依旧http这个协议而来的,分为服务器端和客户端
Web 服务器:是指驻留于因特网上的某种类型的计算机程序,当web浏览器客户端连到服务器上并请求文件时,服务器将处理该请求文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(也就是文件的类型)。服务器使用的是HTTP(超文本传输协议)进行信息交流。
你的 WWW 服务器不但需要一个可让客户端浏览器浏览的平台,还需要提供客户端一些数据才行!那这些可供查询的数据有哪些类型?最主要的其实是超文件卷标语言 (Hyper Text Markup Language, HTML)。其实超文件卷标语言大多只是一些纯文本数据,然而透过浏览器对于一些标签 (<tag>) 的解释后, 就能够得到不同的文字格式、颜色显示等等。(这其实就是一些网页制作领域的内容了和俺们这个章节虽然有关但关系不大。有兴趣的朋友可以去查询一些相关资料)
Web 客户端: 与其他的服务器类似的,你要连结上 WWW 网站时,该网站必需要提供一些数据, 而你的客户端则必需要使用可以解析这些数据的软件来处理,那就是浏览器。在我看来这就是其客户端。
二.    工作原理
  Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求,Web服务器可以响应一个静态页面或图片,进行页面跳转,或者把动态响应的产生委托给一些其它的程序(例如CGI脚本,JSP脚本,servlets,ASP脚本,服务器端JavaScript,或者一些其它的服务器端技术。)无论它们的目的如何,这些服务器端的程序通常产生一个HTML的响应来让浏览器可以浏览。
三.    Web 服务器软件
既然是 web服务,就必然会有其所用的软件,不然总不能硬生出来个服务吧呵呵。目前市面上用的最多的web server服务器软件有两个。一个是微软的信息服务器(iis),另外一个则是Apache。因为大家都是学linux 的,所以这里我们主要运用的自然就是Apache了。(大家这里别误会哦,Apache可是可以运行在所有计算机平台的)
Apache 的主要特征是:
  • 可以运行在所有计算机平台;
  • 支持最新的HTTP 1.1协议;
  • 简单而强有力的基于文件的配置;
  • 支持通用网关接口CGI;
  • 支持虚拟主机;
  • 支持HTTP认证;
  • 集成Perl脚本编程语言;
  • 集成的代理服务器;
  • 具有可定制的服务器日志;
  • 支持服务器端包含命令(SSI)
  • 支持安全Socket层(SSL)
  • 用户会话过程的跟踪能力;
  • 支持FastCGI;
  • 支持Java Servlets。

 

一. 安装软件
 我因为自己系统已经配置过 yum仓库了,所以直接执行
yum install httpd即可查看一下我们是否安装到位:
[root@linux102 conf]# rpm -qa httpd
httpd-2.2.3-31.el5
ok,我的虚拟机是已经安装过的。
二.Web的配置
Ok ,终于到实际操作了,Apache安装好后,会生成以下一些主要目录分别是/etc/httpd,/var/www,/var/log/httpd/,/usr/sbin/apachectl
/usr/bin/htpasswd, /usr/sbin/httpd

下来我一一对其进行一个简单的解释
1./etc/httpd
其中包含了conf、conf.d、logs、modules、run 几个目录:
(1)"/etc/httpd/conf
主要存放了配置文件httpd.conf,这个是最重要的配置文件,Apache的所有主要权限和功能都在这个文件中进行了详细的设置。
(2) "/etc/httpd/conf.d"
  里面存放的是一些额外的参数档,比如php.conf,或者一些自己设定的额外参数等信息。这个目录最大的好处就是可以自己设定自己的参数信息,比如我可以自己建立一个dl.conf,里面配置好相关参数,那么当apache启动的时候,这个文件会自动被读入到主要配置文件当中。这样的话当系统升级的时候,咱就不需要更动原本的配置文件,只要将自己设置的参数文件复制到正确的地点即可。
 (3) "/etc/httpd/log"
  这里自然就是日志文件。
 (4) "/etc/httpd/modules"
 Apache 模块的存放路径
 2./var/www
  这里主要存放了
  (1)/var/www/html
web 服务器预设的首页文件存放目录。默认的主页是保存在其中的。此项默认页面可在httpd.conf中进行更改。这个后面会提及。        
其实安装好apache后,只要再次默认目录下设置好页面内容后就可以在浏览器中看到了。
就好比我们刚刚安装好Apahche后,并没有过多设置什么,只需要在/var/www/html下如下设置即可:
[root@linux102 html]# vi index.html       // 创建并编辑index.html
hello world                            // 页面内的内容
[root@linux102 html]# service httpd restart
Stopping httpd:                                            [ OK ]
Starting httpd:                                            [ OK ]
Ok ,我们现在在浏览器中观察下是否显示我刚设置的内容:
 

看 已经显示到了吧,其实到这里就是一个最最基本的web服务器,只要开启Apache,并且默认主页目录下有默认主页内容即可,但很多权限之类的设置却是在httpd.conf中设置。
  (2)/var/www/error/
若主机因为设置错误,或者浏览器客户端要求的数据错误,在浏览器上显示的错误信息就是这个目录下的信息。
  (3)/var/www/icons/
此目录是提供Apache默认的一些图标。
  (4)/var/www/cgi-bin/
  默认的一些可执行的CGI(网页程序)程序放置的目录
   3./var/log/httpd/
默认的Apache日志文件保存在此
   4./usr/sbin/apachectl
这个就不是目录了,此处的apachectl是文件,是apache的主要执行文件,这个执行文件其实是shell script,它可以主动检测系统上的一些设置值,好让您启动apache时更简单。简单的说就是apache 的一些管理工具
   5./usr/bin/htpasswd
当我们想要登陆某些网页的时候,会提示输入账号和密码。而apache本身就提供一个最基本的密码保护方式,该密码的产生就是通过这个指令实现的。
   6./usr/sbin/httpd
一个二进制的执行文件
 
    其实最重要的就是/etc/httpd/cron/httpd.conf/var/www/html/目录,第一个是web的配置文件,web服务器的相关权限,读写的设置等等信息都在其中进行设置。第二个则是客户端读取网页的默认存储路径,在默认情况下,服务器会将首页保存在此目录下。我们会在下面的章节一点一点的介绍

   1.   httpd.conf

   web服务器的配置文件保存在 /etc/httpd/cron/目录下,我们打开此文件,会看到里面密密麻麻的一堆内容,接下来我一个一个的详细解释,以加强自己的记忆:
首先我们要对此文件有个整体的认识:其基本格式如下:
【全局配置】                   //设置web服务器性能参数
       全局选项
 。。。。。。
【主服务器设置】            //设置默认站点的相关选项
     主服务器的选项
   。。。。。。
 【虚拟主机】              //设置虚拟主机相关选项
    选项
   。。。。。。
Ok大致就是这么个分类情况,下来我们慢慢解释
                                                         全局选项:
     (1)ServerTokens OS
  这个项目在告知客户端 WWW 服务器的版本与操作系统。不需要更动他。如果你不想要告知太多主机的信息,这个项目将 OS 改成 Minor 
    (2)ServerRoot "/etc/httpd"
  设置 apahce 的工作主目录。指定何处保存服务器的配置、错误及日志等文件。这个是设置文件的最顶层目录,通常是绝对路径,下面某些设置使用相对路径的时就是与这个设置值有关的下层目录。所以我们最好不要更改。
   (3) PidFile run/httpd.pid
  放置 PID的文件,可方便apache软件的管理。只有相对路径。参考ServerRoot设置的值,所以文件是在/etc/httpd/run/httpd.pid。它记录了httpd守护进程的进程号的文件名。(/var/run/httpd.pid是一样的)
  (4)Timeout 120
  定义服务器与客户端的连接超时时间;此设置的意思是持续联机阶段如果等待超过 120秒则终端该次联机。一般不超过300秒即可。
  (5)KeepAlive on/off
  是否允许持续性的联机,也就是说一个 tcp联机可以具有多个文件资料传送的要求。例如,我们给网站传送多个文件或者图片,那么一次连接就会将所有的数据都传送完,而不必对每个文件或图片进行一次tcp连接。建议将默认的off 改为on
  (6) MaxKeepAliveRequests 500
  与上个设置有关,当 keepalive设置为on时候,则此处的意思是表示一次连接可传输的最大传输量。0 代表不限制
  (7) KeepAliveTimeout 15
  定义一次连接中的两次请求之间的间隔时间。也就是在允许 KeepAlive的条件下,该次联机在最后一次传输后等待延迟的秒数。当超过这个秒数,则该联机将中断。
  (8)Listen  端口号/ip地址:端口号
例如:
#Listen 12.34.56.78:80
Listen 80 意思是设置服务器 httpd的守护进程的监听端口。
   (9) Include conf.d/*.conf
  因为这一行,所以放置到 /etc/httpd/conf.d/*.conf 的设定都会被读入

                                                           主服务器设置
   (1)User apache Group apache
   设置 httpd进程的启动用户和启动用户所属的组。
   (2) ServerAdmin root@localhost
   
设置管理员的邮箱地址 ,当网站出现错误时,错误信息显示的联络邮箱就是这个。
    (3) ServerName linux102.example.com:80
    格式为: ServerName 主机名:端口号/ip地址:端口号。
设置服务器的名称,默认情况下该设置是不起作用的,通常在配置虚拟服务器的时候才启用,主机名必须是个合法且能够使用 DNS域名(也就是说你填入的这个主机名要能找的到ip)
 这里输入主机名称后,我们在浏览器中属于主机域名就可以访问其 web服务器主页 如图:

 

  (4) UseCanonicalName Off
  设置 appache是否使用Servername定义的名称作为主服务器的访问名称。如果你的主机有多个主机名,若这个设定为 On,那么 Apache 只接受上头 servername 指定的主机名联机而已。请使用 Off。
  (5) DocumentRoot "/var/www/html"
  设置站点的主目录,他规范了 WWW 服务器主网页所放置的『目录』所在。这个设定值是可以被随意更动的,不过更动之后你必须要针对该目录进行权限设定,也就是底下要讲到的 Directory 这个设定值来规范目录的权限才行!
   (6) Directory目录
  格式为:
<Directory  目录>
  选项………              //该容器用来定义目录的相关属性
< /Directory>
 

例如:
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>                //这个设定值是针对 WWW 服务器的『预设环境』而来的,因为针对『/』的设定建议可以设定的严格一点,就是保留上述的预设设定即可 (已经很严格了!)
<Directory "/var/www/html">
    Options Indexes FollowSymLinks  <==建议拿掉 Indexes 比较妥当!
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
 目录这块的内容我们在后面再细讲。
 (7) UserDir disable
  将 URL映射到系统用户的工作目录中的一个子目录,即支持个人主页,若用该选项,则将UserDir disable该为UserDir public_html。
 (8) DirectoryIndex
 定义默认文件的档名,我的默认为:
DirectoryIndex  index.html index.php  index.html.var
     用来声明首页文件名称。一般地,我们用 "index.html"或"index.htm"作为首页的文件名。如果这样设置后,那么客户端发出WEB服务请求时,将首先调入的主页是在指定目录下文,此目录的文件是按照顺序执行。比如里面有index.html dl.html 等几个文件,那先读取的是哪个呢?当然是index.html,因为其顺序在前面啊
    但这里我有个问题,当我默认路径下存在一个 index.html 和index.php时,不管我DirectoryIndex中是如何排列其顺序的,都是先读取php文件貌似优先级比较高?但如果我把/etc/httpd/conf.d/php.conf中的“DirectoryIndex index.php”改为DirectoryIndex dl.php(反正和 http.conf中的不是一个名字)而我 http.conf中的“DirectoryIndex  index.html index.php”保持这个顺序不变,则我重新登录,则发现显示的主页是 index.html的内容。这个时候我把顺序在变下为:dl.php index.html 则显示的又是dl.php的内容了。
   所以我的理解是:当 /etc/httpd/conf.d/php.conf中的DirectoryIndex设置好了默认php文档后,只要默认发布目录下有此设置的文档,则不管httpd.conf中是否在此设置的php文档,也不论顺序如何,都将默认发布的是php.conf中的DirectoryIndex 选项内容。当php.conf中设置的文件不存在的时候,则按照httpd.conf中DirectoryIndex设置的顺序读取。
    也就是说php.conf中的DirectoryIndex是将其后的文件设置成首页档名,如果你在 /var/www/html 这个首页目录内新增一个php.conf内设置的档名时,此档名可以被使用为首页显示
     比如 php.conf中设置了文件名为dl.php,那么无论httpd.conf中是如何设置的,在打开浏览器输入主页的时候都会自动去寻找dl.php的页面。当此页面不存在的时候,则会去读取httpd.conf中的设置顺序。
    当然这个理解不一定是正确的,我只是根据我自己的实验做的总结而已。仅供大家参考,如果有不对的地方希望大家也可以给我指正出来。
    Ok,到这里全局配置和主服务器配置的一些主要参数就解释完了,不知道看到这里大家是否会配置一个简单的 web服务器了不?其实web简单的配置是十分简单的。分几步:
1. 安装Apahche软件
2. 在httpd.conf中设置好DirectoryIndex的默认主页名称(一
般也不用设置)
3. 根据http.conf中设置的DirectoryIndex默认主页名称,在
/var/www/html/(DocumentRoot设置默认目录)这个默认发布目录中设置主页内容。
4. 重启httpd服务即可。
   这就是一个最简单的配置,看到这里大家应该可以知道怎么更
改主目录、怎么设置主机域名、怎么更改默认主页了。
 
                          虚拟主机设置
    前面已经将全局配置和主服务器配置进行了总结,下来总结下虚拟服务设置,虚拟主机,顾名思义并不是真的有台WEB服务器,而是通过软件来模拟一套,但对客户端而言,则跟真机没什么区别。我们用具体例子来讲解。
   作用:将一台物理主机,作为多个web站点服务
    种类:基于IP地址的虚拟服务器;基于域名的虚拟服务器;动态虚拟服务器
语法:
vi /etc/httpd/conf/httpd.conf
 <virtualhost ip地址/主机名>
        DocumentRoot “目录名”
</virtualhost>
1.    首先我们来配置一个基于IP地址的虚拟服务器
顾名思义,基于IP的地址意思就是主要监听的是ip地址,可以通过不同的ip去访问不同的主页,现在假设我web主机上有三个ip地址:192.168.0.102;192.168.0.110;192.168.0.111。并且三个ip各指向不同的主页:ip为102的指向默认主页;ip110的指向/etc/www/110目录下的页面;ip111指向/etc/www/111下的页面,这样就是一个物理主机,可以作为多个web站点。那么如何去做呢?
[root@linux102 html]#ifconfig eth0:0 192.168.0.110 netmask 255.255.255.0
[root@linux102 html]# ifconfig eth0:1 192.168.0.111 netmask 255.255.255.0//给web主机建立两个ip地址
[root@linux102 www]# mkdir 110 111           //建立110和111目录
[root@linux102 www]# ls -l
total 24
drwxr-xr-x 2 root root 4096 Aug 22 08:44 110
drwxr-xr-x 2 root root 4096 Aug 22 08:44 111
 
[root@linux102 110]# vi index.html
I am 110
[root@linux102 111]# vi index.html
I am 111
 
[root@linux102 110]# vi /etc/httpd/conf/httpd.conf
#NameVirtualHost *:80                               //这里注意监听端口是屏蔽的
<VirtualHost 192.168.0.110:80>                     
    DocumentRoot /var/www/110/                     //110 ip主页的目录
    ServerName linux102.example.com                //web服务器的主机名称
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
 
<VirtualHost 192.168.0.111:80>                  //设置111的主页设置 
    DocumentRoot /var/www/111/
    ServerName linux102.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
~                    
[root@linux102 110]# service httpd restart
Stopping httpd:                                            [ OK ]
Starting httpd:                                            [ OK ]
 
 (这里说明下,ip 102的因为是web服务器的地址,所以其主页即是web服务器的默认主页,我们已经在前文所讲的web服务器的主服务器配置中进行了讲解,所以这里就不多做说明了。) 
 
我们通过客户端浏览器输入不同的ip地址看是否可以得到其主页
 

 
  通过上面三个截图我们可以看出ip102得到的是web默认主页(也就是主服务器设置中的主页),ip110则得到的是新建的110目录下的主页,ip111则是111目录下的主页。一个web服务器可以通过不同的ip设置指向不同的主页,110和111的页面就是虚拟服务设置的。这样解释不知道是否明白了呢,当然如果你主页有多个ip,但没进行虚拟主机设置的话,那么多个ip都是指向主服务器设置的主页。
2.    基于域名的虚拟服务器
刚才我们试验的是多个ip指向一个web服务器,那么如果是多个
域名指向一个web服务器呢?
   我们假设web服务器上有三个域名:
 Linux102.example.com;
 Linux110.example.com;
 Linux111.example.com
    Linux102 指向web默认的主页,linux110指向前面试验中设置的/var/www/110下的主页,linux111指向/var/www/111下的主页。在这个设置中因为是关系到域名的,所以一定要设置域名解析。
依旧是要设置/etc/httpd/conf/httpd.conf中的配置,不过首先要解析域名,不然多个域名解析不到web服务器的话,怎么设置也是没用,所以我们可以通过添加DNS A记录或者用在hosts文件中添加域名进行解析即可。
[root@linux102 html]# vi /etc/hosts   //解析域名,不然无法解析哦
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       linux102.localdomain linux102
::1             localhost6.localdomain6 localhost6
192.168.1.102   linux102.example.com   //添加linux102的主机域名
192.168.1.110   linux110.example.com   //添加linux110的主机域名
192.168.1.111   linux111.example.com   //添加linux111的主机域名
 
[root@linux102 html]# vi /etc/httpd/conf/httpd.conf
 
ServerName linux102.example.com:80 //设置web的域名,这个大家可以参考前面的内容
 
NameVirtualHost *:80            //这里这个可要打开了哦,前面那个例子这个是屏蔽的
<VirtualHost *:80>
    DocumentRoot /var/www/110           //主页存放路径
    ServerName linux110.example.com     //linux110域名
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/111
    ServerName linux111.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
~                                                                                              
(和前面说的一样,linux102是默认web的服务器地址,所以我们这里不多做讲解)
 Ok 我们来在客户端输入三个域名看是否可以得到主页。
 

 
 看到没,三个不同的域名都分别指向了web服务器中的不同的目录。当然也可以虚拟服务器中将三个域名都指向一个主页地址
 
 
    ok web 的基本配置基本总结完了。