西西河

主题:【原创】浅谈一个Public IP如果提供多个网站服务 -- Highway

共:💬13 🌺11 新:
全看分页树展 · 主题
家园 【原创】浅谈一个Public IP如果提供多个网站服务

世界上怕就怕“琢磨”二字,IT界也概莫能外。昨天有朋友问起这个问题,说是“一台服务器可否建立两个不同的网站?”

在这里我把这个问题提得更有代表性一些,就是“一个Public IP上能不能提供多个网站服务?”。为什么这么改一下呢?因为服务器只是一个Physical Device,不是很重要,重要的是Public IP的问题。一个服务器可以有N个网卡,一个网卡上你可以Assign多个IP,所以如果你有数个Public IP的话,那么一台服务器当然可以Host multiple sites了。我想大家关心的不是这个问题,大家好奇的是一个Public IP怎么Host multiple sites。

答案首先是肯定的,大家先请放宽心。现在就让我们看看这个问题通常是如何解决的。

一。老式的做法 -- multi-Port

大家知道,WEB工作的原理是IP + Port,大家默认的web http Port是80,加密的(https)port是443。现在你只有一个IP,如果要想提供多个web site而保证他们之间不相互冲突,那么最简单的办法就是给各个site以不同的port。一台计算机上有6万多个Port,所以你可以host如此多的网站(当然很多Port已经被别的Servic占用了,比如ftp 21,smtp 110等等)。这样的话,问题就解决了。譬如你的一个Public IP 66.77.88.99上可以Host 如下网站:

http://www.highway.com //default one, using port 80

http://www.highway.org:800 //using port 800

http://www.greatsite.com:900 //using port 900

当然了,上面提到的这些网站必须是注册过的,并且ISP DNS会讲这些Domain name转换到你的Public IP 66.77.88.99上来。

Wow,这么简单啊!

嘿嘿,你别急,这么做看着是简单,但问题挺多。因为在Domain name后面跟上Port number的做法不常见,用户非要记住你的Damn port number不可,不方便。更糟糕的是绝大部分公司的防火墙只允许端口80上的Traffic进出,别的Port都被屏蔽了。这就意味着你的网站很多人可能无法访问。Shit,right?

(注:别人看不到有时候是好事。比如你的计算机上有两个Web site,一个对外,用默认的80端口,另外一个是公司内部网,用端口8000,这样有防火墙帮你忙,外面的用户无法看到你的inernal web site,这样到省去你很多安全方面的问题了,是不是?)

二。新式的做法--Host header name

从HTTP 1.1起,浏览器访问一个site的时候,除了IP + Port外,还加一个Host header name的东西。这样一来,你就有腾挪躲闪的空间了。既然Port 80是约定俗成不易更改,那么你可以通过改变Host header name来达到你的目的。再Windows2003里面,这个设置非常的简单。(Apache的做法类似,有网友已经指出了,请看链接出处

点看全图

外链图片需谨慎,可能会被源头改

这样,www.highway.com, www.highway.org, www.greatsite.com网站的Traffic都到了你的Web server上,Web Server根据这些访问中的Host header name来把服务请求交到相应的网站上去。

点看全图

外链图片需谨慎,可能会被源头改

Wow,这也很简单嘛!

哈哈,你先别太高兴,这种做法也不是完美的。当你使用https的时候,Host header name被加密了起来,Web server没法看到,所以就无法将访问交到相应的网站去。当然这个问题是有变通的方法解决的,并且一般情况下,个人或是业余网站不会碰到https的问题,所以你也不必太着急。(真着急的时候Call我

这种做法呢是一个Web Server提供多个网站服务。于是大家有些担心:这样做性能是不是有问题啊?可靠性是不是有问题啊,比如一个家伙的网站有问题,把Web server搞死了,那么是不是其他site也就全翘了?

嘻嘻,这个问题就留给大家自己慢慢“琢磨”吧。

三。另类做法--Web Proxy

假设你是一家小公司的老板,公司现在只有一个Public IP,但是你想提供很多服务,譬如说http://game.highway.com, http://forum.highway.com, http://webmail.highway.com等等。这些服务都很重要,你给每一项任务分配了一个专用服务器(甚至是多个计算机组成的一个cluster),以满足性能,可靠性等等的需要。现在的问题是一个IP能玩得转嘛?

答案还是肯定的。你只需要如此这般这般便可:

1) 在Router上设置Port forwarding,将所有端口80号的Traffic全部交到Proxy Server上去。

2)Proxy Server拿到请求后,分析URL中的Host name,根据你内部网络的DNS服务,Proxy Server将请求交到相应的服务器上(注意:像game.highway.com这样一个domain name的解析是两次完成的,第一次你的ISP将highway.com解析成你的Public IP,而第二部分game, webmail,forum则是你的DNS完成的,指向具体的Private IP)。

3)服务器完成用户请求,将Response交给Proxy Server,由它再交给用户。

点看全图

外链图片需谨慎,可能会被源头改

Wow,这个好棒啊!您老人家是不是又开始感叹了?

别太激动,这种做法的局限也是很大的。因为它只能Host一类网站,也就是http://xxx.highway.com,对于其他的网站,譬如http://xxx.lowway.com就无能为力了。

====================================

OK,我知道的三种常用做法介绍完了,大家是不是看出来一个问题:“No single silver bullet,没有一个做法是包治百病的”,到底应该如何去做,你可能还需要根据你的需要,动动脑筋!!!

关键词(Tags): #Public#IP#multi-site元宝推荐:四月一日,
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河