多域名对应同一网站、跳转的三种方法及泛域名设置

不断有朋友在博客问关于多个域名指向同一网站的问题,按说这是一个很基础很简单的问题,但对新手来说,可能有些误解,我在这里详细说下。
这里多个域名指向同一网站,是指裸域名(root domain)和其他如带www的域名指向同一网站。如输入abc.com或者www.abc.com,都是访问abc.com,正如本博客一样;或者输入abc.com或者www.abc.com,都是访问www.abc.com,如淘宝。
还有一种输入abc.com或者www.abc.com,不跳转,但网页内容是一致的,如广告中国(advertcn.com)。

首先,说点基础知识。当一个人访问一个网站,
第一步你的电脑要到这个域名的dns服务器去把域名换成相应的ip,因为ip才是互联网真正的地址和门牌号,域名只不过是方便记忆的别名而已。(中间可能还有dns缓存服务器的过程);
第二步,你的电脑将访问网站的请求发送你的网站服务器,我们的一键包中nginx就是专门处理这种请求的,它根据发来的数据进行处理;
第三步,如果是静态网站,就直接在服务器上读取相应文件的数据(如果是动态的,就将请求数据发送到如php处理后再获取数据),发送给你的电脑浏览器,浏览器将数据解析,然后就展现了缤纷丰富的网页。

那么,如果出现问题,就应该根据相应错误,在这三个方面进行排除,找到正确的地方进行处理。

如果多个域名指向同一网站出问题,在排除dns设置出错之后,一般问题都出在nginx的配置上。
一般dns设置添加www为aname,指向根域名的同一ip(或者设置www的cname为@)

那么,有这么几种设置方法,供参考:
1、多个域名指向同一网站,并301跳转。推荐用这个方法。

比如我的博客actgod.com,nginx的设置是这样的:
vim /etc/nginx/sites-enabled/actgod.com.conf 修改其中这一部分,其他照旧
server_name actgod.com www.actgod.com *.actgod.com;
root /var/www/actgod.com;
if ( $host != "actgod.com" ) {
rewrite ^/(.*)$ http://actgod.com/$1 permanent;
}

如果是想实现淘宝的那种跳转:
server_name actgod.com www.actgod.com *.actgod.com;
root /var/www/www.actgod.com;
if ( $host != "www.actgod.com" ) {
rewrite ^/(.*)$ http://www.actgod.com/$1 permanent;
}

修改好后,重新加载配置:
invoke-rc.d ngxin reload
2、多个域名指向同一网站,使用refresh跳转,百度是用的这个方法,也就是输入baidu.com自动跳转到www.baidu.com,但没用301跳转。
首先用
bash damnp-actgod.sh dhost yourdomain.com 建一个空的虚拟主机。在此虚拟主机目录下新建一个index.html
vim /var/www/yourdomain.com/index.html 内容如下:
<html>
<meta http-equiv="refresh" content="0;url=http://www.yourdomain.com/">
</html>

这种方法,一般来说不如第一种的,特别是从seo的方面考虑,同时需要多加载一个index,速度也有影响,虽然微乎其微。

3、广告中国那种不跳转,只需要修改配置:
vim /etc/nginx/sites-enabled/actgod.com.conf
server_name 后面添加多个域名即可,其他不用改。
server_name actgod.com www.actgod.com *.actgod.com;

最后说下泛域名解析指向同一个网站。
也就是输入任何xxx.actgod.com都指向actgod.com,只需要在dns服务器设置 * 的aname为根域名同一ip,server_name 后面加上*.actgod.com即可。如果要跳转,同上设置。

原文http://actgod.com/archives/92/

原文:http://igfw.net/archives/11536

没有评论: