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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带&#xff0c;而它的作用不仅仅是用来粘东西。别看它是这么小小一块&#xff0c;可是作用却很多。平时我们穿的衣服&#xff0c;裤子难免会粘上些毛。在我们紧急出门的时候&#xff0c;突然发现衣服粘有毛&#xff0c;这时候我们的透明胶就派上用场了。用透明…

sscanf取固定长度的int_sscanf函数用法详解-阿里云开发者社区

函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明&#xff1a;sscanf与scanf类似&#xff0c;都是用于输入的&#xff0c;只是后者以屏幕(stdin)为输入源&#xff0c;前者以固定字符串为输入源…

安卓盒子刷rec linux启动,ADB命令刷入recovery刷机

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼特点&#xff1a;需要手机获取Root权限&#xff0c;需掌握相关cmd命令和ADB命令&#xff1b;虽然命令不同&#xff0c; 但跟fastboot模式刷入方式类似 提示&#xff1a;①新手机未获取Root权限的在CMD命令行输入su后到手机上点击程…

python partial_Python--并行计算框架(pathos)

​应用python进行数据挖掘或计算时&#xff0c;往往需要遍历多种参数进行数据建模&#xff0c;而单次的建模或计算有时候非常耗时&#xff0c;这时候可以利用python的并行计算功能&#xff0c;加快计算速度。python能够应用并行计算的模块有多个multiprocessing、pathos等。其中…

linux mono apache2,如何利用Mono创建Apache+mono环境(2)

我决定用一种比较主流的linux系统来构建&#xff0c;运行Mono。一方面是因为我比较熟悉它,而另一方面的原因是我们内部的FTP服务器上已经有了一个DVD的iso格式的安装文件.没有一个下载点能下载完美的东西(注:我这里有疑问).你能猜到我选择的是什么吗? SuSE 9.2 Professional.我…

c# out关键字 vb_c# 关键字:ref 和 out

.NET Ref和Out关键字对于值类型。如果不使用ref /out则传递的只是这些值的COPY,使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作&#xff0c;而不是对那个原数的Copy进行操作对于引用类型:如果不使用ref /out,因为传递的是…

endnote怎么改成中文版_毕业论文面对大量的参考文献标注,应该怎么办?(便捷整理的技巧和方法)...

毕业论文不同于一般的小论文&#xff0c;特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页&#xff0c;而硕士论文动辄五六十页&#xff0c;有的甚至七八十页&#xff0c;因此有些东西如果要人工的去修改&#xff0c;将是一件非常痛苦的事情&#xff0c;比如目录自动…

linux 多个cpu使用率,统计多台linux的CPU使用率

依赖于 paramiko 模块&#xff0c;python2 ,测试环境是在 rhel5&#xff0c;初学python&#xff0c;请大家指教&#xff1b;#!/usr/bin/python# -*- coding:utf8 -*-import paramikoimport refrom time import sleeplinux_info([ssoweb12,192.168.5.32],[ssoweb17,192.168.5.37…

typescript的类型描述_TypeScript类型声明书写详解

本文总结一下TypeScript类型声明的书写&#xff0c;很多时候写TypeScript不是问题&#xff0c;写类型就特别纠结&#xff0c;我总结下&#xff0c;我在使用TypeScript中遇到的问题。如果你遇到类型声明不会写的时候&#xff0c;多看看lodash的声明&#xff0c;因为lodash对数据…

怎么创建数据表的实体类和业务类_微服务项目第13天:商品分类业务的实现

今天是刘小爱自学Java的第143天。感谢你的观看&#xff0c;谢谢你。学习计划安排如下&#xff1a;商品分类业务的初步实现。数据模型的分析&#xff1a;数据表字段的设计&#xff0c;Java中对应的实体类&#xff0c;前端页面vue组件。业务模型的分析&#xff1a;请求路径是什么…

power iso linux启动盘,Power ISO Maker/ISO燃烧到磁盘工具 V3.0版

电源国际标准化组织是一个专业的工具&#xff0c;使国际标准化组织文件&#xff0c;并将其燃烧到磁盘。它可以快速地创建一个ISO文件从您的计算机&#xff0c;和ISO文件刻录到CD / DVD光盘。该软件还可以将你的光盘/光盘刻录到一个标准的文件&#xff0c;并烧毁它。你可以使用的…

js整体缩小网页_妙用JavaScript实现网页的任意缩放

现在网页上的字体是越来越小&#xff0c;别说是视力欠佳者就是好眼睛看久了也疼的难受&#xff0c;于是编写了下面这段小脚本&#xff0c;建议网页制作人能够加到网页代码的< head>中&#xff0c;以方便弱视人群放大浏览(仅适用于IE浏览器)&#xff01;代码如下&#xff…

scripts文件夹_常用Scripts整理

常用scripts整理--2020.05.13平时在进行数据处理时&#xff0c;经常会用到一些脚本文件&#xff0c;可以提高效率&#xff0c;我把自己常用到的进行整理总结&#xff0c;希望可以有所帮助1.批量修改图片名字#codingutf-8code by zzg 2020-04-07import os import re import sy…

linux vi如何输入井号,为什么我可以使用井号(#)来破坏vim用户功能命名规则

vimscript帮助文件在定义用户函数时说明&#xff1a;The function name must start with an uppercase letter, to avoidconfusion with builtin functions.这是强制执行的,除了我通过查看其他代码发现的以下情况."This should not work."But it does as long as the…

揭开netty神秘面纱_Netty 源码(ChannelHandler 死磕)

疯狂创客圈 经典图书 &#xff1a; 《Netty Zookeeper Redis 高并发实战》 面试必备 面试必备 面试必备疯狂创客圈 经典图书 &#xff1a; 《SpringCloud、Nginx高并发核心编程》 大厂必备 大厂必备 大厂必备无编程不创客&#xff0c;疯狂创客圈&#xff0c;一大…

c语言链表集合求并集用字母表示,c语言实现的链表集合的并集与交集

c语言,链表,集合求并集,交集#include#includetypedefintDatatype;//定义链表的节点typedefstructLNode{Datatype data;LNode *next;}LNode,*LinkList;boolInitLink(LinkList&L) //初始化链表{L (LinkList)malloc(sizeof(LNode));if(LNULL){return false;}L->nextNULL;re…

python下载文件加上日期_Python实现给下载文件显示进度条和下载时间代码

本篇文章小编给大家分享一下Python实现给下载文件显示进度条和下载时间代码&#xff0c;文章代码介绍的很详细&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家供大家参考&#xff0c;有需要的小伙伴们可以来看看。 该模块调用了三个库&#xff1a; 1.os 2.requests 3.…

c# 计算空格宽度像素_用pythonnet为计算机视觉做图像整理

中国的.NETer是国内技术的另类&#xff0c;当他们强调.NET也可以做啥啥时都会给别的技术藐视&#xff0c;毕竟主流都不用.NET。本人这几年其实花在.NET时间也少&#xff0c;都投入在Python/Go社区。可我还是有点工作外的寄托&#xff0c;就是让.NET也有一个很好的推广&#xff…

C语言笔试不好应该转专业吗,你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难...

原标题&#xff1a;你认为大学里什么学科“难学”&#xff1f;过来人说出几门&#xff0c;考试难补考更难文/晓宁说教育2020届的大一新生们的第一个学期已经结束了&#xff0c;经过了一个学期的学习和生活&#xff0c;相信很多学生都对自己的大学有了一定的规划。尽管进入大学之…

mysql默认值无效_MySQL开发规范

一、基础规范1&#xff09; 使用InnoDB存储引擎2&#xff09; 数据库字符集使用UTF8&#xff0c;校对字符集使用utf8_general_ci3&#xff09; 所有表、字段都尽量添加注释4&#xff09; 库名、表名、字段名使用小写字母&#xff0c;禁止超过32个字符&#xff0c;须见名知意5&a…