下载首页     资讯中心     落伍笑话     最近更新     下载分类     下载排行       广告服务     落伍文秘     落伍论坛     RSS  
电信镜像站点
网通镜像站点
落伍免费博客
系统程序 安全软件 网络工具 媒体工具 视频软件 图文处理
游戏娱乐 汉化补丁
主机托管 域名注册 虚拟主机
桌面工具 管理软件 教育教学 数码软件 ASP源码 PHP源码
国产软件 国外软件
网站建设 网络推广 主机托管
您的位置:首页软件教程操作系统 → Linux下虚拟域名的实现
  Linux下虚拟域名的实现
  日期:2005-7-25 16:39:15 人气: 出处:ASPCool 作者:郑涛    [ ]
  目前Linux操作系统十分火爆,所以很多朋友希望了解一下Linux下虚拟域名的实现过程。下面就基于目前比较流行的RedHat来讨论一下。

  一、DNS服务器的设置

  我们知道互联网网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来实现的。因此要想实现虚拟域名首先应当令DNS服务器接受该虚拟域名,即把它映射到指定的IP地址上。因为我们靠Web服务器来区分域名,所以这个IP地址自然应当是Web服务器所管理的。

  RedHat6.0操作系统中捆绑有BIND DNS服务器。它的域名配置文件是"/etc/named.conf",一般情况下,域配置文件放在"/var/named"目录下面。

  例1、named.conf文件的配置:

  zone "domain.com" {
  type master;
  file "domain.com";
  };
  zone "0.10.10.in-addr.arpa" {
  type master;
  file "10.10.0";
  };

  该例子说明"domain.com"的域配置文件是"/var/named/domain.com",反向域的配置文件是"/var/named/10.10.0"。domain.com文件负责把DNS域名映射为IP地址。

  例2、domain.com文件配置:

  @ IN SOA dns.domain.com. hostmaster.dns.domain.com. (
  1998111003 ; serial
  3600 ; refresh
  900 ; retry
  1209600 ; expire
  43200 ; default_ttl
  )
  @ IN MX 10 dns.domain.com.
  @ IN NS dns.domain.com.
  @ IN A 10.10.0.1
  www IN A 10.10.0.1

  假定要增加的域名是aaa.domain.com,想要指到www.domain.com,DNS服务中应增加一个别名记录,可写成:

  aaa IN CNAME www.domain.com.

  如果需要配置大量的虚拟域名,domain.com文件要很大,而且也相当麻烦。我们可以使用符号 "*" ,即在 domain.com 文件中加入:

  * IN CNAME www.domain.com.

  这样它就把所有没给出设置的以domain.com结尾的记录全部转到www.domain.com去了,不管是aaa.domain.com还是bbb.domain.com。这不会影响已有的记录。配置好DNS服务器后应该重新启动守护进程named:

  [root@domain /root]# /etc/rc.d/init.d/named restart

  二、Apache服务器的配置

  Apache服务器是目前互联网上使用最多的Web服务器,它可以维护非常繁忙的站点。RedHat 6.0捆绑了Apache Web Server 1.3。它的配置文件位于"/etc/httpd/conf"目录下,有httpd.conf、srm.conf、access.conf,下面讨论一下与虚拟域名有关的配置:

  1、静态配置

  修改配置文件 httpd.conf 的步骤:

  (1) 首先设置UseCanonicalName为off。它指示用服务器Host:header的内容代替ServerName 的值来提供给环境变量SERVER_NAME。

  (2) 然后加入:

  NameVirtualHost xxx.xxx.xxx.xxx其中xxx.xxx.xxx.xxx为所要配置的虚拟服务器的IP地址。在此可配置多个虚拟IP地址,当然要与DNS服务器中的配置一致。(注意:这里要用IP地址,不能用域名。)

  (3) 接下来为每个虚拟域名加入一段记录:

  < virtualhost xxx.xxx.xxx.xxx>
  .....
  < /virtualhost>

  xxx.xxx.xxx.xxx要和NameVirtualHost配置的IP地址一致。在两个标志之间可加入的配置参数有:

  ServerName后面跟你要增加的虚拟域名,如aaa.domain.com ;
  Documentroot如果你映射到本机的路径就加在后面,如"/home/aaa" ;
  redirect如果你映射到远端的URL可加在后面,有两个参数,第一个是虚拟域名的相对路径,第二个是远端站点的URL;
  ServerAlias后可加入本域名的别名,可使用通配符,如*.aaa.domain.com 。

  下面举两个例子:

  例3、映射到本机的物理路径:

  < virtualhost xxx.xxx.xxx.xxx>
  DocumentRoot "/home/test"
  ServerName test.domain.com
  < virtualhost>

  例4、映射到远端的URL:

  < virtualhost xxx.xxx.xxx.xxx>
  ServerName test1.doamin.com
  redirect / http://test.domain1.com/welcome.htm
  < /virtualhost>

  还有一些参数,象log文件的位置、超时的设置、缓冲区的设置等等,在此不一一介绍,可以参考Apache服务器的在线帮助文件。配置好httpd.conf文件后需要重新启动Apache的后台守护进程httpd,

  [root@domain /root]# /etc/rc.d/init.d/httpd restart

  每增加一个虚拟域名就要增加一段位于 < VirtualHost...>...< /VirtualHost> 之间的配置代码,而且只有在重新启动 httpd 后新配置才能生效。

  2、动态配置

  可以发现,如果要配置大量的虚拟域名将大大增加配置文件的长度,这样还会使Apache启动变慢,占用更多的内存,而且也不容易实现在线申请。可以通过选择动态方式来配置。这样不必事先写好配置,而是通过编写一定的动态规则来自动生成或随时从独立的配置文件中读取信息。

  Apache有一个强大的扩展功能,即模块(Modules)的特性。模块可对服务器的功能进行扩充,它在运行和使用时才装入服务器,这样比一直放入服务器中要节省内存空间,同时也比调用外部CGI程序速度快。

  现在使用一个功能强大的模块来实现动态配置虚拟域名,这就是mod_rewrite。它负责侦听从客户机送出的URL地址,并基于一组规则表达式对该URL来进行重写。这类似于URL别名概念,但它更进了一步,输出的URL可以映射到其他主机的任何URL地址上。 修改配置文件httpd.conf的步骤:

  (1) 先设置UseCanonicalName为off 。

  (2) 使用RewriteEngine on打开rewrite引擎。用RewriteMap设定配置文件的位置和属性,用RewriteCond和RewriteRule制定相应的规则。

  例5、httpd.conf 文件中相关配置的一个例子:

  RewriteEngine on
  RewriteMap lowercase int:tolower
  # 定义独立的配置文件的位置
  RewriteMap vhost dbm:/www/conf/vhostdbm
  # 利用独立的配置文件重映射虚拟域名
  RewriteCond ${vhost:%1} ^(/.*)$
  RewriteRule ^/(.*)$ %1/docs/$1

  RewriteCond %{REQUEST_URI} ^/cgi-bin/
  RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
  RewriteCond ${vhost:%1} ^(/.*)$
  RewriteRule ^/(.*)$ %1/cgi-bin/$1

  这里的 vhostdbm 文件格式见"CGI 程序的编制" 。

  三、CGI程序的编制

  要实现虚拟域名的在线申请,就必须编写相应CGI程序动态修改独立的配置文件(即上面的vhostdbm文件)和进行用户的管理(包括用户申请,登录,密码修改等等)。在此只介绍对独立的配置文件的操作,其他属于如何用Perl语言来编写CGI程序,请参考有关资料。

  vhostdbm文件使用dbm格式来记录数据,与用普通文本文件相比可加快寻找速度,而且易于修改。许多UNIX系统都具有叫做dbm(database management)的标准库。该库将键-值对的集合存贮到一对磁盘文件中,提供简单的数据库管理工具,可以方便的更改、新增或删除数据内容。

  Perl访问dbm的方式:通过一个类似于打开文件的进程将关联数组与dbm数据库联系起来。在数组中创建新元素时立即就更改了dbm数据库。删除一个元素的同时也删除了dbm数据库中的数值。可使用:

  1、欲将dbm数据库与dbm数组相关联起来:

  dbmopen(%arrayname,"dbmfilename",$mode);

  如果dbmfilename不存在的话就新建该库。%arrayname参数是Perl的关联数组(如果这个数组已经有值,那么这些值就被删除)。该关联数组连接到叫做dbmfilename的dbm数据库中。$mode 参数是当需要创建库时控制库文件权限的数字,该数字被指定为8制,经常被用到的是0644,给除了机主之外的新用户以只读的权限,机主可有全部权限。

  2、关闭dbm库:

  dbmclose(%arrayname);
  %arrayname 是已经与dbm库关联了的数组名。

  例6、VHOST打开vhostdbm,或新建一个dbm库:

  dbmopen(%VHOST,"vhostdbm",0644);

  例7、新建记录或更改已有记录(设从html文件form中传过来的参数名为vhost、rhost):
  $VHOST{$FORM{'vhost'}}=$FORM{'rhost'};

  例8、删除已有记录(设从html文件form中传过来的参数名为vhost):
  delete $VHOST{$FORM{'vhost'}};

  例9、关闭vhostdbm:

  dbmclose(%VHOST);

  注:以上已经假设传过来的参数经过了验证,不存在重复的记录,否则会导致已有记录的混乱。

上一篇:Flash文字特效系列:浮雕字
下一篇:透过局域网架网站--PortTunnel
 
 热点文章
·脱光衣服要收钱
·学习贯彻十六届五中全会精..
·卖淫
·国税干部妻子廉政爱家演讲..
·个人年终总结材料
·关于学习团员先进性的心得..
·树立正确的入党动机,早日..
·团员、青年学习教育心得体..
·去看色情电影!
·保持团员先进性 坚定..
 推荐文章
·特大淫秽色情网站情色六..
·比尔盖茨最痛恨的三个中..
·轻松"偷窥"!强..
·玩转智能手机 Pocket PC..
·微软发布MSN 8.5最终版[..
·微软推出Windows Media ..
·Ubuntu,Kubuntu和Xubunt..
·第3只眼:病毒开启摄像头..
·微软Vista官方中文版泄露..
·[特大新闻]百度3000万收..
·zend已经可以破解
·为了你的系统安全千万别..
·希捷收购迈拓官方网站开..
·液晶八代生产线逼迫液晶..
·卡巴斯基安全套装2006版..
关于本站帮助( ?)广告服务版权声明业务合作加盟我们265自助链联系我们
版权所有:落伍下载站 2005-2006 未经授权禁止复制或建立镜像 
Copyright © 2005-2006 www.LwDown.com online services. All rights reserved. 粤ICP备06085338号
在线管理员QQ:5330918 QQ群1:12761713(满) QQ群2:18427800
我要啦免费统计