二级域名转发程序实现原理
功能服务:首先来分析一下二级域名程序所有提供的服务。就是我们来通过国际域名moocky.net,提供诸如abc.moocky.net的域名转发到目的的网站(网址)。这就是二级域名程序所要实现的功能。
虚拟主机:
随着Web服务器的发展,也有原来的一台服务器上只能建立一个Web站点,发展到现在可以建立虚拟主机更加成熟的WebServer。当然这个也和浏览器的发展是分不开的。大家在访问一个站点的时候比如http://www.moocky.net,浏览器首先连接http://www.moocky.net这 个网站所对应的服务器,然后再把主机头(也就是域名,http://后面到第一个[/]反斜杠之间之间的部分)给服务器,服务器接收到主机头之后,然后再 返回所对应的站点的内容。这也就是基于名称的虚拟主机的原理,当然基于IP的虚拟主机的原理就是通过IP地址来判断相应的Web站点。个默认站点,就是当 基于IP的虚拟主机找不到所对应的IP、基于名称的虚拟主机找不到对应的名称是所有访问的站点,就是默认站点了。当然这个也为我们实现域名转发提供可能。
范解析和范绑定:
什么是范解析?比如:我有一个moocky.net的国际顶级域名,那么我需要将“任意字符.moocky.net(*.moocky.net)”,解析 到一个固定的ip,如果我们要一个一个的去做那当然是不可能实现的了,那范解析就是用来做这个的。现在的大多数域名注册商都有提供泛解析(也就是大家通常 说的范域名解析)。
什么是范绑定?上面刚刚讲了虚拟主机的实现原理,那么范绑定也就是一个范域名到对应站点的一个实现过程。比如刚刚我已经做了*.moocky.net的范 解析,接下来要做的就是让*.moocky.net指向到我的站点(注意同一个IP上也可能有很多个主机);对于基于IP的虚拟主机,那我可以告诉你“恭 喜你,你不用再作范绑定了。”(为什么呢,自己多想想),但是对于基于名字的虚拟主机要做范绑定,恐怕就是不是人人都知道了。不同的Web服务器范绑定是 不同的,我就简单得说一下我所知道的:
据我目前所知IIS、TomCat不能绑定范域名(如果你知道怎么绑定请你告诉我一下),但这并不是说IIS、Tomcat就不能实现二级域名程序,别忘 了我们还有基于IP的虚拟主机和一个默认站点呢。虽然不能想范绑定那样可以为所有站点都做到,但至少可以勉强实现。
到此,有关二级域名程序实现原理的服务器部分就算是讲完了,不知道你能否明白。
二级域名转发的程序实现部分相对来说就很简单了。
测试:首先来看一个测试,我们首先在web站点下面建立一个文件test.php(test.asp、test.jsp;php可以使用phpinfo ()函数,ASP和JSP可以遍历ServerVariable),用该程序来打印服务器的相关信息,这里不再赘述程序的具体写法,主要对比的是 HTTP_HOST这个参数的变化,然后用http://test1.moocky.net/test.php、http://test2.moocky.net/test.php、http://test3.moocky.net/test.php, 我么可以看到,三次访问HTTP_HOST分别对应的是tes1.moocky.net、tes2.moocky.net、 tes3.moocky.net,这也就是我前面讲到的浏览器发送给WebServer的主机头,到这里我想你应该差不多明白怎么用程序来实现二级域名转 发了。
程序编写:明白来实现的原来,下面我来看看为用户提供二级域名的程序流程。用户通过注册,申请一个域名abc.moocky.net,提供自己的网址:http://www.moocky.net/blog.xml,注册完成,用户在浏览器打开http://abc.moocky.net,程序自动跳转的http://www.moocky.net/blog.xml。
第一步,我们就是建立数据库,来保存用户注册信息;
user_info表结构:
PRIMARY KEY (user_id);
UNIQUE KEY `domain` (`domain);
user_id int auto_increment;
domain varchar(20);
password varchar(20);
homepage varchar(100);
第二步,编写用户注册程序(略);
第三步,编写转发程序;
ASP程序:
<%
dim host = request.servervariables('http_host')
dim sql = "select * from user_info domain='" & host & "'"
.....查询数据库操作,将网址付值给homepage(省略)....
%>