目前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);

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

linux 多域名访问数据库,Linux下虚拟域名的实现相关推荐

  1. mysql数据库域名_mysql域名访问数据库

    mysql域名访问数据库 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

  2. apache下虚拟域名配置

    在我们开发中通过虚拟域名来访问一个指定的项目确实很方便,接下来教大家如何通过手动的方式去配置虚拟域名(已apache服务器为例) 原文链接:http://www.imooc.com/article/1 ...

  3. 查询linux安装了什么数据库,Linux系统中安装MySQL数据库操作手册

    Linux系统中MySQL数据库安装手册 一.安装概述: 在Linux操作系统中安装MySQL数据库是一个我们必须要掌握的一门技术,也决定了你以后找工作的薪资待遇,所以你知道它的厉害了吧!学会安装只是 ...

  4. linux限制目录访问权限,linux用户的访问权限限制的方法都有哪些

    如果你不希望自己的文件被人读取,又或者只是不想某个特定的用户读取修改文件,限制访问权限是最好的处理方法,下面小编就给大家介绍下Linux下限制用户访问权限的方法,一起来学习下吧. 现在需要限定某个用户 ...

  5. android web 访问数据库,Web下的JDBC访问数据库的基本步骤

    Web下的JDBC访问数据库的基本步骤 (2012-06-02 12:09:33) 在Java程序中连接数据库的一般步骤分为一下几部分,我摘录出来,跟大家分享. (1)将数据库的JABC驱动加载到cl ...

  6. nginx配置php域名访问,nginx+php+composer+git+域名配置+项目访问

    本文作者: 架构师刘涛? -------------- epel仓库安装 epel是yum的软件源,里面包含了许多基本源里没有的软件 #默认的yum源无法升级PHP,需要添加第三方yum源,我们选择w ...

  7. Apache端口设置多域名和转发请求(虚拟域名)

    在Apache里设置80端口有多个域名:(我的apache是在C盘) 找到C:\xampp\apache\conf\extra\httpd-vhosts.conf,打开: 在文件最后添加配置: < ...

  8. linux python连接oracle数据库_Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法...

    本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL.Oracle.SQL Server数据库. 其中包括以下几个软件的安装及配置: ...

  9. linux 自动配置 mysql数据库,Linux下配置mysql数据库主从自动备份

    当网站内容越来越多的时候,数据库也变得越来越大了.如果不小心误删了,或者被攻击了,那就什么都没有了,一切归零.到现在博主也认识到了数据库的重要性,于是决定研究研究数据库的自动备份.如果你是土豪那可以直 ...

最新文章

  1. ACE Lock类介绍
  2. springmvc +bootstrap创建简单web项目
  3. cocos2d-x C++ 原始工程引擎运行机制解析
  4. 搭建Hexo博客(一)-创建Hexo环境
  5. PostgreSQL11.7逻辑复制的搭建
  6. AI 补代码神器诞生,百度网盘克星诞生,Google 取消中国搜索引擎项目! | 开发者周刊...
  7. Python的filter、map、reduce与lambda结合使用
  8. python免费课程400节-小码王少编程经典课程都有哪几个 这里揭晓
  9. Python for循环中使用index索引
  10. dalsa相机设置编码器外触发_Modicon M262 编码器接口功能介绍
  11. 马云的B2B B2C 和C2C的“三合一”
  12. JAVA系统蓝屏_Tomcat启动系统蓝屏
  13. Latex(katex)csdn 希腊字母表示,数学符号,集合符号,特殊标记
  14. 恶意软件同源性方法研究
  15. 7-26 输出大写英文字母
  16. 大数据分析案例-基于XGBoost算法构建二手车价格评估模型
  17. Android实现语音发送播放功能以及示例代码
  18. 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号
  19. 【降价提醒】,您关注的商品已降价!
  20. BearPi-HM_Nano开发板“护花使者”案例

热门文章

  1. MATLAB(四)在高等数学中的应用
  2. 单反相机内部光线反射原理
  3. 剑指 Offer 06. 从尾到头打印链表(递归、逆置链表、头部动态插入)
  4. css怎样定义div大小,css如何设置div大小
  5. java loadonstartup_java的web配置文件的“load-on-startup0/load-on-startup”一个问题
  6. android发送点击事件,Android 模拟发送事件
  7. PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现
  8. NSRunloop小总结
  9. JAVA table word,实战 | Java读取Word,包含表格!
  10. 安卓能硬改的手机机型_手机后盖材质,金属比塑料的好,玻璃比金属的好,是这样么?...