我买的Linode的VPS,SSD有1G,只放我的个人博客显然很浪费资源,所以把其他的我做的网站也放到这个服务器上,相当于合租,管理权在我。
既然多个网站使用同一个服务器,那么就有问题了。一般一个域名绑定一个ip地址,DNS解析后就可以访问到ip地址所在的服务器上的网站了,但是这多个网站,一个ip地址怎么办呢?
1.可以向服务器提供商再买几个独立ip,都属于这台服务器的,然后不同的域名绑定不同ip地址。这样做的显然都是土豪,我等平民哪玩儿的起。
2.Apache可以实现多个域名绑定一个ip,并通过HTTP请求中的请求头判断要访问的主机名(即客户要访问哪个域名),根据不同的主机名把客户链接(地址映射)到不同的网站目录中,从而实现了多个域名绑定一个ip,并能够访问多个网站的目的。
下面我先详细说一下如何做,再解释为什么。还有,在映射到dedecms的时候,可能会碰到问题,我下面也会提到。
拿我的VPS举个栗子,我图方便,直接安装了lampp(集成了Apache、MySQL、PHP的linux平台的HTTP服务器套件),安装路径是/opt/lampp
假设:
假设现在你的服务器ip地址是106.187.90.237,HTTP为默认监听端口为80。
在你的服务器上要挂两个网站(多个网站的方法类似)
一个是你的博客,路径是/opt/lampp/htdocs/wordpress,用域名blog.xinspace.space访问它;
另一个是学校网站(我这里用dedecms举栗子),路径是/opt/lampp/htdocs/artschool,用域名www.zbhongli.cn来访问它。
步骤:
1.如果你已经为域名做好了解析工作,直接跳到第2步。如果没有,可以看看这一步的内容。
进入你购买域名的服务商那里,进入服务商提供的DNS服务(推荐到比较大的服务商购买域名,如新网、万网等)。比如新网的DNS服务的链接在:登录你的新网帐号-》管理域名-》我的域名-》选择域名-》管理-》我的DNS服务(如果找不到DNS服务的链接,可以电话咨询域名服务商)。
假设你已经进入了DNS服务,里面有两个地方需要你设置。
下面先完成博客的域名与ip地址的解析工作,要添加A记录和CNAME记录,一般只指定域名其相应的ip地址即可,其他参数默认,如下:
1.1. A记录 域名 ip地址
xinspace.space 106.187.90.237
1.2. CNAME记录 域名 域名
blog.xinspace.space xinspace.space
保存,博客的域名与ip解析就完成了,接着我们退出博客域名的DNS服务,进入学校域名的DNS服务,完成学校网站与ip地址的解析,如下:
1.3. A记录 域名 ip地址
zbhongli.cn 106.187.90.237
1.4. CNAME记录 域名 域名
www.zbhongli.cn zbhongli.cn
保存,学校的域名与ip地址解析也完成了。
等一段时间(一般2个小时),ping blog.xinspace.space 和 ping www.zbhongli.cn ,会发现这两个域名都被解析到了106.187.90.237,达到了我们要的效果。如果出现unknown host的错误的话,可能是解析还没完成,再等一段时间。但是,下面的工作不用等到解析完成之后,我们只要把解析的关系建立完成后,就可以继续第2步了。
2.修改apache的配置文件,让它在同一服务器上(即同一个ip地址)能为不同的域名(apache中叫主机名)映射到不同的目录:
登录服务器,Apache的配置文件是/opt/lampp/etc/http.conf,打开它,在文件最底下加上下面的语句:
<VirtualHost *:80>
ServerName www.xinspace.space
DocumentRoot /opt/lampp/htdocs
</VirtualHost>
这样,就已经把博客的目录与域名的映射关系建立好了。下面继续建立学校网站和学校域名,继续在本文件中最下面添加:
<VirtualHost *:80>
ServerName www.zbhongli.cn
DocumentRoot /opt/lampp/htdocs/artschool
</VirtualHost>
好了,两个网站目录和两个域名的映射关系均搭建完成了。保存文件并退出。
3.等到你的域名与ip地址的解析完成之后(ping域名的话,反馈信息能够解析到你的ip地址就表示完成了),就可以使用不同的域名访问不同的网站了,可以试一试。如果你使用的是dedecms建立的一个网站,而且是从别的服务器搬到这个服务器上来的,那么就需要注意了,可能你通过域名访问网站的时候,网站没有了效果,具体的说就是无法加载相应的css文件和js文件。我下面说一下这个问题。
4.我是恰好把学校的网站从另一个服务器上搬到了这个新的服务器上,碰到了上面说的问题,我访问www.zbhongli.cn,首页没有任何效果,之前的图片啊、色彩啊、字体之类的完全没有了。肯定是访问路径出问题了。于是我查看了以下http.conf文件中的绝对路径,/opt/lampp/htdocs/artschool,没有任何错误啊,也就是说我在地址栏中输入www.zbhongli.cn,浏览器就会去访问106.187.90.237/artschool/index.php。为了验证一下,我在地址栏中输入106.187.90.237/artschool,网站首页是正常的,各种效果和图片都能加载。这更加肯定是路径出错了。
经过排查,我最终发现,是因为DedeCMS安装目录的原因。在dedecms后台-》系统-》系统基本参数-》核心设置-》Dedecms安装目录这里,我填的是artschool,这是没错的,因为我们确实要把网站放到这个目录。但是,在模板文件中的 标签里链接css是这么写的 ,经过dedecms解析模板之后,变为 ,乍一看,路径没错。但是仔细看看,是有问题的。
在第2步的时候说了,在Apache配置文件中加入了两次,第二次的域名与网站的映射关系我再复制到这里:
<VirtualHost *:80>
ServerName www.zbhongli.cn
DocumentRoot /opt/lampp/htdocs/artschool
</VirtualHost>
也就是说域名www.zbhongli.cn映射到106.187.90.237/artschool(其中106.187.90.237会被apache自动映射到/opt/lampp/htdocs/这个目录)。如果把这个映射关系再套到上面的link链接地址中,是不是发现错误了,我们把上面的link链接地址展开对比一下:
展开前的css路径:www.zbhongli.cn/artschool/templets/default/css/main.css
展开后的css路径:106.187.90.237/artschool/artschool/templets/default/css/main.css
前面加粗的部分是我们在apache配置文件中添加的映射关系。
因此,展开后,我们就明白错误的根源了,即{dede:global.cfg_templets_skin/}/css/main.css这个路径是错误的。也就是说{dede:global.cfg_templets_skin/}是错误的,而{dede:global.cfg_templets_skin/}是由域名/cfg_cmspath/这两部分组成的,其中cfg_cmspath就是dedecms后台-》系统-》系统基本参数-》核心设置-》Dedecms安装目录对应的全局变量。
我们的域名(www.zbhongli.cn)已经被apache根据我们的配置映射到了106.187.90.237/artschool/了,所以dedecms安装目录中填写的artschool是多余的,会使得通过域名访问网站的路径错误,**我们只要把全局变量中的值删掉,留空就可以了**。
如果你要把两个网站放到虚拟空间上,而不是服务器上的话,上面将到的修改apache的配置的方法是行不通的(因为你接触不到apache服务器,被虚拟空间提供商给屏蔽了),你要么通过子域名系统,使得两个网站成为某个域名的子域名,如主域名是xinspace.name,解析到ip地址为106.187.90.237,博客域名是blog.xinspace.name,学校域名是school.xinspace.name。这样,在虚拟空间的控制面板(cPanel)中找到子域名,添加这两个子域名,并设置好子域名对应的目录路径,保存之后就可以直接访问了。
如果不像使用子域名,只能购买两个ip地址了,两个域名分别绑定。
啰嗦了一大堆,讲的很繁琐,主要就是想讲明白。有问题,发邮件(xinspace@yeah.net)联系我。