Web学习之――03Apache服务器的高级配置(虚拟主机、status)

Apache服务的配置分为三个阶段:

1、  全局配置(theglobal environment):对主服务器或虚拟机都有效,且有些功能是服务器自身属性;

2、  主服务器(mainserver):主站属性;

3、  虚拟主机(VirtualHosts):虚拟主机及属性定义;

 

本次实验讨论第三阶段:虚拟主机;

         httpd的虚拟主机;

         httpdstatues

         curl命令的使用

         httpd的压缩功能

=======================================================

一、httpd的虚拟主机:

1、  什么是虚拟主机:

虚拟主机是在同一台主机中搭建基于不同主机名、端口号及基于不同IP的多个网站服务的技术,可以为运行在同一物理机器上的各个网站指配不同的IP和端口,也可让多个网站拥有不同的主机名;

虚拟主机的类型:

一共有三种类型的虚拟主机:

         基于端口虚拟主机:一个IP、一个主机名对应多个端口;

         基于IP虚拟主机:一个主机名、同一个端口对应多个IP地址;

         基于主机名(FQDN)的虚拟主机:一个IP地址、一个端口对应多个主机名;

【实验环境】

        一台CentOS6.6虚拟机作为web服务器兼DNS服务器,一台windows 8.1的物理机做客户端,规划如下:

域名:webtest.com                 172.16.21.9                                                                       CentOS6.6

DNS: ns1.webtest.com                  172.16.21.9                                                                       CentOS6.6

Web: httpd.webtest.com(别名:apache.webtest.com)    172.16.21.9               CentOS6.6

Win8.1客户端:172.16.21.1                   DNS指向 172.16.21.9

2、  DNSApache2.2的基本配置:

1) 在172.16.21.9CentOS虚拟机上安装并配置好DNS服务,配置文件的内容如下图所示:

[root@centos ~]# yum install -y bindbind-chroot bind-utils
[root@centos ~]# vim /etc/named.conf

wKiom1YL1x-z-b_KAABZCsyW1G8573.jpg

区域解析文件webtest.com.zone的配置内容如下图所示:

wKioL1YL11qxxD_jAACIKNtUm28992.jpg

关于DNS的配置,请参考前面有关DNS的配置文章;

2) 在172.16.21.9CentOS虚拟机上通过yum安装好httpd2.2,做好基本配置并在DocumentRoot目录下创建好默认的index.html文件。

[root@centos ~]# yum install httpd �Cy
DocumentRoot "/var/www/html"
[root@centos ~]# cat/var/www/html/index.html
<html>
<head>
         <metacharset="UTF-8">
         <title>kalaguiyin测试</title>
</head>
<body>
         <h2>欢迎访问,这是测试主页</h2>
         <marquee>http://kalaguiyin.51cto.com<marquee>
</body>
</html>


3) 在Win8.1主机上配置好网络,特别注意将DNS指向我们配置好的DNS服务器(172.16.21.9);

wKioL1YL187zmwLLAAE9_PjrFH0469.jpg

4) 在Win8.1客户端的浏览器中输入相应网址测试两台web服务器及DNS配置结果;直接输入Apache服务器的IP地址的访问结果;

wKioL1YL1_-Ch1YBAADJpkE9Jzc023.jpg

输入域名的访问结果:

wKiom1YL2Bfz7ylbAACxfPftmpc843.jpg

上面的网址即为我们DNS里设置的web服务器的主机A记录,因此可以看到DNSWeb都已经工作正常了哈。

3、  配置虚拟主机:

  1. 配置虚拟主机的前提条件:

虚拟主机与主服务器不能并存,因此需要先关闭主服务器,即找到主服务器端的DocumentRoot,将其注释掉:

wKiom1YL2FKS7_VOAAAcv6hd48A562.jpg

然后用一个容器类指令来定义虚拟主机:
<VirtualHost IP:PORT>
    ServerName
    DocumentRoot ""
</VirutalHost>
#说明:ServerName和DocumentRoot就是一个虚拟主机最基本的两个配置,但可以为每个虚拟主机定义更多的属性:日志、用户访问控制等等

  1. 配置基于虚拟端口的虚拟主机:

(1)    Apache2.2上面配置如下所示:

#(1)找到httpd.conf文件中虚拟主机段,做如下配置:
<VirtualHost *:80>
     ServerName  www.80.com      #不是根据主机名来定义,因此此处可任意写
     DocumentRoot "/website/host1"   #80端口的虚拟主机网站根目录设置为此处   
</VirtualHost>
 
<VirtualHost *:8080>
     ServerName  www.8080.com
     DocumentRoot "/website/host2"   #8080端口的虚拟主机网站根目录设置为此处 
</VirtualHost>

#(2)配置监听端口(同时监听80、8080端口):
Listen 80
Listen 8080

#(3)保存退出并检查语法:
[root@Centos ~]# httpd -t
Warning: DocumentRoot [/website/host1] does not exist   #网站根目录不存在啊,创建即可
Warning: DocumentRoot [/website/host2] does not exist
Syntax OK
#(4)创建网站根目录:
[root@centos named]# mkdir -pv/website/host{1,2}
mkdir: created directory `/website'
mkdir: created directory `/website/host1'
mkdir: created directory `/website/host2'
[root@centos named]# httpd -t
Syntax OK
#(5)在上面创建的host1、host2目录下创建默认主页面:[root@Centos ~]# vim /website/host1/index.html
<h1>www.80.com</h1>
[root@Centos ~]# vim /website/host2/index.html
<h3>www.8080.com</h3>

#(6)重新启动httpd服务(因为改动了端口号)
[root@Centos ~]# service httpd restart

在客户端浏览器中验证配置:

wKioL1YL2PvB1LKqAABwG8hunkQ588.jpg

wKioL1YL2TzDTDFYAADcV01CW9Q368.jpg

wKioL1YL2Xqy83I-AABomgtQ-Y4546.jpg

wKiom1YL2W7ShQuvAADcdmI7iK0159.jpg


说明:基于端口号的虚拟主机配置在生产环境中用的不多,因为客户端访问web服务器默认用的都是80端口,客户端并不知道服务器所配置的端口是什么。

C、配置基于IP的虚拟主机:

1、  Apache2.2上的配置如下:

(1)    为当前虚拟机添加一个地址,IP的配置结果如下:

[root@centos named]# ifconfig eth1:1172.16.21.15 netmask 255.255.255.0 up
[root@centos named]# ifconfig
eth1     Link encap:Ethernet  HWaddr00:0C:29:6B:87:DD 
         inet addr:172.16.21.9 Bcast:172.16.21.255 Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:fe6b:87dd/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
         RX packets:20878 errors:0 dropped:0 overruns:0 frame:0
         TX packets:11524 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:1798478 (1.7 MiB)  TXbytes:1346141 (1.2 MiB)
eth1:1   Link encap:Ethernet  HWaddr00:0C:29:6B:87:DD 
         inet addr:172.16.21.15 Bcast:172.16.21.255 Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1

(2)    /var/named/webtest.com.zone区域解析文件中添加一条主机A记录:

wKioL1YL2fbjry__AACaLTb7j0U642.jpg

保存退出,并重新加载DNS的配置文件和区域解析文件;

(3)    编辑httpd.conf,找到虚拟主机配置段做如下配置:

<VirtualHost172.16.21.9:80>
        ServerName www.a.com
        DocumentRoot "/website/host1"
</VirtualHost>
 
<VirtualHost172.16.21.15:80>
        ServerName www.b.org
        DocumentRoot "/website/host2"
</VirtualHost>

(4)    修改/website/host1/index.html/website/host2/index.html,内容如下:

[root@centos named]# cat/website/host1/index.html
<h1>www.a.com</h1>
[root@centos named]# cat/website/host2/index.html
<h3>www.b.org</h3>

(5)    重启httpd服务并在windows客户端的浏览器中进行访问测试:

wKiom1YL2lnBvia8AAB0FB8xaXQ095.jpg

wKioL1YL2oSSWxlzAANkHJvLSPY916.jpg

可以看到,因为DNS轮巡的结果,我们事先了基于IP的虚拟主机;

说明:

         基于IP的虚拟主机配置在生产环境中用的也不多,因为公网IP日益短缺并且每分配一个公网IP接意味着多支付一笔昂贵的费用哈。

         基于IP的虚拟主机是通过DNS的轮巡机制来实现的。

D.       配置基于主机名(FQDN)的虚拟主机:

正是因为上面2中虚拟主机不常用,因此有了第三种虚拟主机;基于主机名的虚拟主机;

1、原理:

思考一个问题:我们在浏览器中输入域名访问网站,最终结果是域名被DNS解析成了IP地址,主机和主机之间只能通过IP来通信。如此不同的主机名对应同一个IP如何实现?

【答】:基于主机名(多个主机名对应一个IP)的虚拟主机,是通过HTTP协议中请求报文首部的Host属性来实现的哈,因此也被称作基于主机头的虚拟主机。如图所示:

wKiom1YL2sPjLpUSAAI9t-6a-wA621.jpg

2、  配置步骤:

(1)      编辑httpd.conf,找到虚拟主机配置段做如下配置:

wKioL1YL2wOBKwEsAAEPnD-JkLc377.jpg

说明:NameVirtualHost指令只用在Apache2.2及其以前的版本中,Apache2.4以后的版本就不需要该指令了。

(2)      创建网站目录并提供默认主页面文件:

wKiom1YL2zyA35ZuAAEQbA6JXMM233.jpg

(3)      DNS的区域解析库文件/var/named/webtest.com.zone中修改主机记录文件,如下图所示:

wKioL1YL23WA4h_nAAEHUzPjo8A481.jpg

(4)      重启DNS服务和httpd服务:

wKioL1YL257xN-WOAADsxQu2QLk355.jpg

(5)      windows客户端的浏览器中测试结果:

查看访问httpd.webtest.com的结果(用开发者工具(F12)查看消息头信息):

wKioL1YL28qyWRm1AANPsYhaVNc772.jpg

wKiom1YL2-aQm7mZAANrItBzqq0725.jpg

说明:

1、基于主机名(FQDN)的虚拟主机是用的最多的一种虚拟主机。

2、对于Apache2.2及其以前的版本,基于主机名的虚拟主机的定义需要通过NameVirtualHost指令来定义,Apache2.4以后的版本则不需要。

3、基于主机名的虚拟主机是通过HTTP协议请求报文首部的Host属性来实现的,故而也称为基于主机头的虚拟主机

E.       配置混合类型的虚拟主机:

以上三种虚拟主机可以混合使用,具体过程如下:

(1)    定义监听端口:

wKiom1YL3C2jSNb_AAAjhOrmclM023.jpg

(2)    定义虚拟主机:

wKioL1YL3GGiC-GkAAJIwvTsrXI671.jpg

(3)    创建不同虚拟主机的完整根目录及默认页面:

wKiom1YL3Iyhuu6PAAB5sNuB9JE162.jpg

(4)    修改DNS的区域解析文件/var/named/webtest.com.zone:

wKiom1YL3LnwRWByAAB4Kl9xiIk404.jpg

(5)    重启DNS服务和httpd服务:

wKioL1YL3POymyd6AACfPFMaFMM738.jpg

(6)    windows客户端的浏览器中测试结果:

基于主机名的虚拟机:

wKiom1YL3RGD6j_RAAI2J7oWMek792.jpg

wKioL1YL3T-iQ5fpAAHoOcLBtyk543.jpg

基于IP的虚拟主机:

wKioL1YL3WqTIWzeAAHdPVUiPLI527.jpg

基于端口号的虚拟主机:

wKiom1YL3ZvjgpfYAAHF2UXkvJA551.jpg

F.为基于端口号的虚拟主机配置基于组的访问控制:

每个虚拟准基的配置互不影响,可以单独为指定的虚拟主机配置诸如日志、用户访问控制等属性。下面就以基于端口号的虚拟主机为例,为其配置基于组的访问控制:

(1)    修改httpd.conf配置文件:

wKioL1YL3eCw847YAAED2pQU3TM759.jpg

(2)     创建用户认证文件:

[root@localhost /]# htpasswd -cm/etc/httpd/conf/.htpass Tom
New password:
Re-type new password:
Adding password for user Tom
 [root@localhost /]# htpasswd -m/etc/httpd/conf/.htpass Johnson
New password:
Re-type new password:
Adding password for user Johnson

(3) 创建组文件/website/vhost_PORT/.htgroup:

[root@localhost /]# vim/website/vhost_PORT/.htgroup
[root@localhost /]# cat/website/vhost_PORT/.htgroup
Employees:Tom Johnson

(4)    重读httpd配置文件:service httpd reload

(5)    windows客户端主机上通过浏览器测试结果:

WinXP

wKioL1YL3lvwEDOhAAEST8Fyhsg103.jpg

提供用户名和密码后就可以访问了:

wKioL1YL3pWwsmCKAABYDwI4bN8626.jpg

wKiom1YL3qyQ3EykAAD2K9ZwXcU575.jpg

wKioL1YL3t7gDiJXAACBAsOK1h8519.jpg

二、httpdstatus(服务器状态信息)

开启原则:status在需要时才开启,就算需要开启,也尽量以最少的信息输出为原则(因为开启status会影响服务器性能;)

开启方法:通过status_module模块允许Apache服务器生成状态报告;

1、  查看当前Apache服务器是否启用了mod_status模块;

wKiom1YL3xni2M6dAABWWZU9FlY559.jpg

2、  status是通过容器类指令<Location /server-status></Location>来定义的,具体如下所示:

<Location /server-status>  #Locaton容器类指令表示:我们要通过哪个URL路径访问下面定义的status(URL可以自定义)
    SetHandler server-status    #server-status是处理器名称,SetHandler指令用于设置处理器
    AuthName "Status"    #定义用户访问控制(服务器状态信息不能让所有人查看)
    AuthType Basic
    AuthUserFile /etc/httpd/conf/.statuspass
    Require valid-user
</Location>

通过ExtendedStatus指令可以查看更为详细的status信息:

ExtendedStatus On|Off    
#开启或关闭扩展的status信息(默认是关闭的)

3、  举例说明:

(1)    编辑httpd.conf文件,启用status_module模块(默认就是启用的,但最好确认一下)

wKioL1YL35yzJT6JAABqcMEzdM0938.jpg

(2)    找到<Loacation /server-status>,取消注释:

wKiom1YL37mDdiiSAACQny047bg408.jpg

(3)    保存退出后重读配置文件:service httpd reload

(4)    windows客户端的浏览器中访问/server-status:

wKiom1YL3-bhjrN6AAKiIStOtJc866.jpg

(5)    开启ExtendedStatus以查看更为详细的status信息:

wKioL1YL4CSxFy-bAAATfcwNF3s259.jpg

(6) 保存退出并重读httpd配置文件,然后在windows客户端浏览器再次访问server-status页面:

wKioL1YL4Fvw60AWAAMe1YcPqIw725.jpg

说明:

1、服务器的status会影响服务器的性能,如果没有必要建议关闭。就算需要开启,也尽量让其输出最基本的信息;

2、服务器的status信息一般不允许所有用户查看,因此建议设置用户访问控制;

三、Curl命令的使用:

curl是基于URL语法在命令行模式下工作的文件传输工具,它支持FTPFTPSHTTPHTTPSGOPHERTELNETDICTFILELDAP等协议。curl支持HTTPS认证,并且支持HTTPPOSTPUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道(proxy tunneling),甚至还支持IPv6socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大(类似于迅雷,但curl还是一个基于命令行的浏览器)。

curl的常用选项:
    -A/--user-agent <string> 设置用户代理发送给服务器
    -basic 使用HTTP基本验证
    --tcp-nodelay 使用TCP_NODELAY选项
    -e/--referer <URL> 来源网址
    --cacert <file> CA证书 (SSL)
    --compressed 要求返回是压缩的形势
    -H/--header <line>自定义头信息传递给服务器
    -I/--head 只显示响应报文首部信息
    --limit-rate <rate> 设置传输速度
    -u/--user <user[:password]>设置服务器的用户和密码
    -0/--http1.0 使用HTTP 1.0

Example

1、只显示响应报文首部信息:

wKiom1YL4LHQiSTbAAEUYkHneJ0858.jpg

2、模拟Referer(从某个页面跳转过来)

wKiom1YL4NzySD4kAAGgxMc7Riw572.jpg

四、httpd支持压缩功能:

使用deflate_module模块可以压缩页面以优化网络传输速度:

<IfModule mod_deflate.c> 
    # Restrict compression to these MIME types
    # 指定对某些MIME的格式文件进行压缩
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    # Level of compression (Highest 9 - Lowest 1)
    # 配置压缩等级(1-9),9为最高等级,压缩比例最大,但消耗CPU资源也越多
    DeflateCompressionLevel 9
    # 对某些不支持压缩的浏览器进行部分压缩或不压缩
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 
</IfModule>

小结:

         httpd配置的注意点】;

1、  指令的分类:指令与容器类指令:

首字母大写,形如ServerRoot “ ”被称为指令;

用一对尖括号括起来,形如:<Directory “FS_PATH”></Directory>被称为容器类指令

2、  指令的继承性:

httpd的指令是由继承性的,例如我们先定义了一个<Directory>容器类指令,如下所示:

<Directory   "/website/htdocs">
        Options  Indexes  FollowSymLinks
#随后,我们又定义了一个<Directory>容器类指令:
<Directory   "/website/htdocs/dowloads">
        Options   Indexes    #这里没有显式定义FollowSymLinks,会继承上面的定义!
# [+-] 指令:  +FollowSymLinks明确添加该属性   -FollowSymLinks明确说不使用该属性


==========================================================

今天就学习到这里吧,上面所写只是我学习过程当中的一些,一些,笔记吧,难免出现错误,或者表述不正确的地方,请见谅!

============================================================

你可能感兴趣的:(虚拟机,Web,服务器,status,虚拟主机,IP地址)