我不去想是否能够成功
既然选择了远方
便只顾风雨兼程
我不去想能否赢得爱情
既然钟情于玫瑰
就勇敢地吐露真诚
我不去想身后会不会袭来寒风冷雨
既然目标是地平线
留给世界的只能是背影
我不去想未来是平坦还是泥泞
只要热爱生命
一切,都在意料之中
既然选择了远方
便只顾风雨兼程
我不去想能否赢得爱情
既然钟情于玫瑰
就勇敢地吐露真诚
我不去想身后会不会袭来寒风冷雨
既然目标是地平线
留给世界的只能是背影
我不去想未来是平坦还是泥泞
只要热爱生命
一切,都在意料之中
呼喊是爆发的沉默
沉默是无声的召唤
不论激越
不是宁静
我祈求
只要不是平淡
如果远方呼喊我
我就走向远方
如果大山召唤我
我就走向大山
双脚磨破
干脆再让夕阳涂抹小路
双手划烂
索性就让荆棘变成杜鹃
没有比脚更长的路
没有比人更高的山
沉默是无声的召唤
不论激越
不是宁静
我祈求
只要不是平淡
如果远方呼喊我
我就走向远方
如果大山召唤我
我就走向大山
双脚磨破
干脆再让夕阳涂抹小路
双手划烂
索性就让荆棘变成杜鹃
没有比脚更长的路
没有比人更高的山
男孩跟女孩是一对热恋中的恋人,很不幸的是女孩在一次体操比赛中倒下了,医生确诊为:白血病。
男孩每天都陪在女孩的病床前,看着女孩那,苍白憔悴的脸,男孩哭了。哭的很伤心,男孩每天晚上都在女孩的病床前,为女孩折上几只千纸鹤,就这样过了几个月。女孩已经奄奄一息了,一直昏迷着,男孩还是重复的为女孩折千纸鹤,男孩折到1000只整的时候,病房被照亮了,天使忽然出现在男孩的面前,男孩被吓呆了,揉了揉哭肿了的眼睛,握着女孩的手,哭着对天使说,求你救救这个善良的女孩吧,天使对男孩说,只要你愿意,为女孩做3年蜻蜓,女孩就会慢慢的好起来,男孩毫不犹豫的答应了,天使消失了,同时男孩也变成了一只蜻蜓。
女孩果然慢慢的好起来了,女孩醒了,睁开眼睛却不见男孩的身影,病房里只有一只蜻蜓停留在病房的窗子上,起初的几个月里女孩非常想念男孩,女孩自言自语的说,男孩一定变心了,不在喜欢我了,于是每天女孩都对着窗子上的蜻蜓发呆,蜻蜓扇动着翅膀仿佛要对女孩说着什么。
过了1年,时间冲淡了一切,女孩似乎忘记了男孩,跟照顾他的医生走在了一起,女孩跟医生决定马上就举行婚礼,婚礼的当天,蜻蜓也飞到了教堂的红地毯上,蜻蜓望着女孩健康的笑容,哭了,眼泪落在了红地毯上,这时候天使又出现在蜻蜓的面前,天使问蜻蜓:你后悔吗?蜻蜓流着眼泪对天使说,我不后悔,天使消失了,蜻蜓默默的为女孩祝福,慢慢的飞出教堂,消失在黄昏的地平线上。
男孩每天都陪在女孩的病床前,看着女孩那,苍白憔悴的脸,男孩哭了。哭的很伤心,男孩每天晚上都在女孩的病床前,为女孩折上几只千纸鹤,就这样过了几个月。女孩已经奄奄一息了,一直昏迷着,男孩还是重复的为女孩折千纸鹤,男孩折到1000只整的时候,病房被照亮了,天使忽然出现在男孩的面前,男孩被吓呆了,揉了揉哭肿了的眼睛,握着女孩的手,哭着对天使说,求你救救这个善良的女孩吧,天使对男孩说,只要你愿意,为女孩做3年蜻蜓,女孩就会慢慢的好起来,男孩毫不犹豫的答应了,天使消失了,同时男孩也变成了一只蜻蜓。
女孩果然慢慢的好起来了,女孩醒了,睁开眼睛却不见男孩的身影,病房里只有一只蜻蜓停留在病房的窗子上,起初的几个月里女孩非常想念男孩,女孩自言自语的说,男孩一定变心了,不在喜欢我了,于是每天女孩都对着窗子上的蜻蜓发呆,蜻蜓扇动着翅膀仿佛要对女孩说着什么。
过了1年,时间冲淡了一切,女孩似乎忘记了男孩,跟照顾他的医生走在了一起,女孩跟医生决定马上就举行婚礼,婚礼的当天,蜻蜓也飞到了教堂的红地毯上,蜻蜓望着女孩健康的笑容,哭了,眼泪落在了红地毯上,这时候天使又出现在蜻蜓的面前,天使问蜻蜓:你后悔吗?蜻蜓流着眼泪对天使说,我不后悔,天使消失了,蜻蜓默默的为女孩祝福,慢慢的飞出教堂,消失在黄昏的地平线上。
我喜欢帮助别人,这个能给人带来快乐,
我也自己也快乐!
幸福,总是在体验过某种痛苦的基础上才令人倍感珍贵的。
我也自己也快乐!
幸福,总是在体验过某种痛苦的基础上才令人倍感珍贵的。
转 我的Javascript(二)
[
2006/04/15 15:07 | by admin ]
2006/04/15 15:07 | by admin ]
转载请注明出处
及其作者feng_sundy
我的Javascript(二)
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g,"");}
function gf_AppendZero(n){return(("00"+ n).substr(("00"+ n).length-2));}//日期自动补零程序//
//取得当前系统日期时间
function gf_now()
{
var fs_now = new Date();
var fs_return="";
fs_return = fs_now.getFullYear() + "-" + gf_AppendZero(fs_now.getMonth() + 1) + "-" + gf_AppendZero(fs_now.getDate());
fs_return +=" " + gf_AppendZero(fs_now.getHours()) + ":" + gf_AppendZero(fs_now.getMinutes()) + ":" + gf_AppendZero(fs_now.getSeconds());
return fs_return;
}
//取得当前系统日期
function gf_today()
{
var fs_now = new Date();
var fs_return="";
fs_return = fs_now.getFullYear() + "-" + gf_AppendZero(fs_now.getMonth() + 1) + "-" + gf_AppendZero(fs_now.getDate());
return fs_return;
}
//验证日期是否合法(true/false)
及其作者feng_sundy
我的Javascript(二)
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g,"");}
function gf_AppendZero(n){return(("00"+ n).substr(("00"+ n).length-2));}//日期自动补零程序//
//取得当前系统日期时间
function gf_now()
{
var fs_now = new Date();
var fs_return="";
fs_return = fs_now.getFullYear() + "-" + gf_AppendZero(fs_now.getMonth() + 1) + "-" + gf_AppendZero(fs_now.getDate());
fs_return +=" " + gf_AppendZero(fs_now.getHours()) + ":" + gf_AppendZero(fs_now.getMinutes()) + ":" + gf_AppendZero(fs_now.getSeconds());
return fs_return;
}
//取得当前系统日期
function gf_today()
{
var fs_now = new Date();
var fs_return="";
fs_return = fs_now.getFullYear() + "-" + gf_AppendZero(fs_now.getMonth() + 1) + "-" + gf_AppendZero(fs_now.getDate());
return fs_return;
}
//验证日期是否合法(true/false)
完整的获取当前jsp文件路径的语句
[
2006/04/15 15:04 | by admin ]
2006/04/15 15:04 | by admin ]
错误:
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getServletPath();
正确:
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()+request.getServletPath().substring(0,request.getServletPath().lastIndexOf("/")+1);
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getServletPath();
正确:
String realPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()+request.getServletPath().substring(0,request.getServletPath().lastIndexOf("/")+1);
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnValue=false;
}
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考虑小键盘上的数字键
event.returnValue=false;
}
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("wrong");
}
</script>
只能是汉字:<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"><br>
只能是英语字符:<input onkeydown="onlyEng();"><br>
只能是数字:<input onkeydown="onlyNum();"><br>
只能是英文字母和数字:<input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"><br>
验证email格式:<input type=text onblur=isEmail(this.value)><br>
不能输入汉字<INPUT onpaste="return false;" style="IME-MODE: disabled; WIDTH: 400px" value="I only accept English input! Thanks for corporation!" name=textfield><br>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnValue=false;
}
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考虑小键盘上的数字键
event.returnValue=false;
}
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("wrong");
}
</script>
只能是汉字:<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"><br>
只能是英语字符:<input onkeydown="onlyEng();"><br>
只能是数字:<input onkeydown="onlyNum();"><br>
只能是英文字母和数字:<input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"><br>
验证email格式:<input type=text onblur=isEmail(this.value)><br>
不能输入汉字<INPUT onpaste="return false;" style="IME-MODE: disabled; WIDTH: 400px" value="I only accept English input! Thanks for corporation!" name=textfield><br>
于IP的虚拟主机使用连接的IP地址来决定相应的虚拟主机。这样,你就需要为每个虚拟主机分配一个独立的IP地址。而基于域名的虚拟主机是根据客户端提交的HTTP头中标识主机名的部分决定的。使用这种技术,很多虚拟主机可以共享同一个IP地址。
基于域名的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机:
一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。
使用基于域名的虚拟主机
相关模块 相关指令
core
DocumentRoot
NameVirtualHost
ServerAlias
ServerName
ServerPath
为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80"。请注意,在NameVirtualHost指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。
下一步就是为每个虚拟主机建立段。的参数与NameVirtualHost的参数必须是一样的(比如说,一个IP地址或"*"代表的所有地址)。在每个段中,至少要有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方。
取消中心主机(Mainhost)
如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个定义块。这个虚拟主机中ServerName和DocumentRoot所包含的内容应该与全局的ServerName和DocumentRoot保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。
比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:
NameVirtualHost *:80
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
当然,你可以用一个固定的IP地址来代替NameVirtualHost和指令中的"*"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。
很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入小节中来解决这个问题。比如说在上面的第一个配置段中ServerAlias指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:
ServerAlias domain.tld *.domain.tld
这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerName或ServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。
最后,你可以把其他一些指令放入段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。
这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的段,并尝试找出一个与请求的主机名相同的ServerName或ServerAlias配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机。
综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到段中,并把它放到配置文件的最前面就可以了。
与旧版浏览器的兼容性
前面提过,有些浏览器无法对基于域名的虚拟主机发送必要的数据,从而使其无法正常工作。这些浏览器将会收到由配置中符合那个IP地址的第一个列出的虚拟主机发出的页面(基于域名的主虚拟主机)。
究竟什么算旧?
请注意,当我们说到旧的时候,我们并不是真的说它们很古老。其实现实中您未必就能用上这些浏览器。现在几乎所有的浏览器都会发送基于域名的虚拟主机所必须的Host头了。
虽然有点麻烦。但您还是有可能会用到ServerPath指令,以下是一个配置实例:
NameVirtualHost 111.22.33.44
ServerName www.domain.tld
ServerPath /domain
DocumentRoot /web/domain
以上这些说明了什么呢?它说明一个具有"/domain"开头的任何URI都会为www.domain.tld这个虚拟主机所伺服。这意味着这个页面可以由http://www.domain.tld/domain/的形式为所有的浏览器所访问。能够发送"Host:"头的浏览器也能使用http://www.domain.tld/这种形式来访问它。
为了达到这样的目的。您先要在您的主虚拟主机的页面上放一个到http://www.domain.tld/domain/的链接。然后,确保在虚拟主机的页面中使用的全是相对链接(诸如:"file.html"或"../icons/image.gif")或者是包含/domain/这个前缀(比如:"http://www.domain.tld/domain/misc/file.html"或"/domain/misc/file.html")。
完成这些可能需要一些尝试,但遵照上述指导将会确保你的页面能够为所有的浏览器所正确显示,不论新旧。
基于域名的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机:
一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。
使用基于域名的虚拟主机
相关模块 相关指令
core
DocumentRoot
NameVirtualHost
ServerAlias
ServerName
ServerPath
为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80"。请注意,在NameVirtualHost指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。
下一步就是为每个虚拟主机建立
取消中心主机(Mainhost)
如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个
比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:
NameVirtualHost *:80
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
当然,你可以用一个固定的IP地址来代替NameVirtualHost和
很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入
ServerAlias domain.tld *.domain.tld
这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerName或ServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。
最后,你可以把其他一些指令放入
这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的
综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到
与旧版浏览器的兼容性
前面提过,有些浏览器无法对基于域名的虚拟主机发送必要的数据,从而使其无法正常工作。这些浏览器将会收到由配置中符合那个IP地址的第一个列出的虚拟主机发出的页面(基于域名的主虚拟主机)。
究竟什么算旧?
请注意,当我们说到旧的时候,我们并不是真的说它们很古老。其实现实中您未必就能用上这些浏览器。现在几乎所有的浏览器都会发送基于域名的虚拟主机所必须的Host头了。
虽然有点麻烦。但您还是有可能会用到ServerPath指令,以下是一个配置实例:
NameVirtualHost 111.22.33.44
ServerName www.domain.tld
ServerPath /domain
DocumentRoot /web/domain
以上这些说明了什么呢?它说明一个具有"/domain"开头的任何URI都会为www.domain.tld这个虚拟主机所伺服。这意味着这个页面可以由http://www.domain.tld/domain/的形式为所有的浏览器所访问。能够发送"Host:"头的浏览器也能使用http://www.domain.tld/这种形式来访问它。
为了达到这样的目的。您先要在您的主虚拟主机的页面上放一个到http://www.domain.tld/domain/的链接。然后,确保在虚拟主机的页面中使用的全是相对链接(诸如:"file.html"或"../icons/image.gif")或者是包含/domain/这个前缀(比如:"http://www.domain.tld/domain/misc/file.html"或"/domain/misc/file.html")。
完成这些可能需要一些尝试,但遵照上述指导将会确保你的页面能够为所有的浏览器所正确显示,不论新旧。
DirectoryIndex default.htm
DirectoryIndex default.asp
DirectoryIndex index.html
DirectoryIndex index.htm
DirectoryIndex index.asp
DirectoryIndex index.php
#上面的这个是定义默认页
#天宜电器
ServerAdmin admin@ty.nd
DocumentRoot D:\测试网站\天宜电器
ServerName www.ty.nd
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
#这个是定义一个网址,www.ty.nd 这个域名在我的机子上有解析
Apache配置虚拟主机
[
2006/04/15 13:38 | by admin ]
2006/04/15 13:38 | by admin ]
虚拟主机使得一台服务器可以运行多个网站。本文介绍如何配置服务器使其支持虚拟主机,包括基于IP的虚拟主机和基于名称的虚拟主机,以及通过运行多个服务daemon实现一台机器运行多个网站的方法。
一、虚拟主机及其应用(1月15日)
虚拟主机就是运行在同一物理服务器上的具有不同名字的多个Web网站。它的基本思想是:即使所有网站都运行在同一个服务器上,Apache也知道用户访问的是哪一个网站,而且能够正确地返回用户所请求的内容。
虚拟主机是这样一种特殊的技术:它使得我们可以在一台机器上运行多个Web网站,支持许多不同的域名和一个域之内的多个名字,从而使得一台通过DSL接入的家用计算机看起来象是一屋子的服务器。这是一种非常巧妙的技术。
为什么要使用虚拟主机
或许你现在已经有了自己的应用虚拟主机的设想。下面是本人通常使用虚拟主机的情况。我在一家Web设计公司工作。为客户开发Web网站时,我们总是为该客户配置一个专用的虚拟主机。这些虚拟主机往往是基于名称的虚拟主机,因为这设置起来比较快,而且几乎总是只在内部进行。也就是说,在内部DNS服务器上设置一下名称,这样内部的主机就可以看到这个Web网站,而外面的浏览器只能看到我们开发服务器上公开的内容。
这种做法有着许许多多的好处。它使得我们能够设置网站的目录结构,其设置方法又和开发完成后实际运行的网站完全一样。它使得我们能够完全地分离不同网站的文件,不会出现搞不清某个文件属于哪个网站的混乱。此外,从开发者的角度来看,它使得我们能够在DreamWeaver中设置完全独立的网站,而不仅仅是设置同一网站的不同子目录。
最后,如果使用虚拟主机,不论我们同时开发的客户项目有多少,都无需分别为每个网站配置一个新的服务器。在任何时候这都是使用虚拟主机最主要的理由。
二、基于IP的虚拟主机(1月15日)
我们可以用两种方法设置虚拟主机。这两种方法只是服务器上配置的不同,对客户来说没有什么区别——也就是说,用户无法知道他们所使用的虚拟主机属于哪一种类型,甚至不会知道自己正在使用虚拟主机。
这两种类型分别是基于IP的(IP-based)虚拟主机和基于名称的(Name-Based)虚拟主机。简单地说,两者的区别在于:使用基于IP的虚拟主机时,每一个虚拟主机都有一个不同的IP地址,而基于名称的虚拟主机都有相同的IP地址,但它们的名称不同。两种类型各有优点,但它们的实现方法并没有什么大的差别。
在基于IP的虚拟主机环境中,同一个服务器机器上运行着多个Web网站,但每一个Web网站都有其自己的IP地址。为了实现这一点,我们首先要在操作系统上设置这些IP地址。大多数现代操作系统都允许我们为一台机器设置任意多的IP地址,具体的设置方法对每种操作系统来说都不同。本文不准备在方面作深入的介绍。如果你不熟悉如何在自己的操作系统上进行设置,请向熟悉的专家请教。一般这种设置并不是很困难。或者,你也可以跳过这种基于IP的虚拟主机,直接转入下面介绍的基于名称的虚拟主机。
有些老式的操作系统要求每个NIC(network interface card,网卡)对应一个IP地址,但现在一般不再有这种限制。
在机器上设置好多个IP地址之后,我们还要在DNS(域名服务器)中设置这些IP地址,这样DNS就能够解析我们赋予这些IP地址的名称。这里我们不准备介绍DNS记录的具体设置方法,你可以要求DNS服务器的管理员设置这些记录。
接下来要做的工作就直接和Apache有关了。假定我们已经将所有的IP地址设置到了机器上,每一个IP地址都有相应的DNS记录,要在Apache的httpd.conf配置文件中增加的内容如下所示。
这里我们假定有三个IP地址,对应的名称分别为name1.mydomain.com、name2.mydomain.com和name3.mydomain.com。当然,这里指定的名称也可以属于完全不同的域,例如www.mydomain.com 和 www.myotherdomain.com。
加入httpd.conf配置文件的内容如下所示:
一、虚拟主机及其应用(1月15日)
虚拟主机就是运行在同一物理服务器上的具有不同名字的多个Web网站。它的基本思想是:即使所有网站都运行在同一个服务器上,Apache也知道用户访问的是哪一个网站,而且能够正确地返回用户所请求的内容。
虚拟主机是这样一种特殊的技术:它使得我们可以在一台机器上运行多个Web网站,支持许多不同的域名和一个域之内的多个名字,从而使得一台通过DSL接入的家用计算机看起来象是一屋子的服务器。这是一种非常巧妙的技术。
为什么要使用虚拟主机
或许你现在已经有了自己的应用虚拟主机的设想。下面是本人通常使用虚拟主机的情况。我在一家Web设计公司工作。为客户开发Web网站时,我们总是为该客户配置一个专用的虚拟主机。这些虚拟主机往往是基于名称的虚拟主机,因为这设置起来比较快,而且几乎总是只在内部进行。也就是说,在内部DNS服务器上设置一下名称,这样内部的主机就可以看到这个Web网站,而外面的浏览器只能看到我们开发服务器上公开的内容。
这种做法有着许许多多的好处。它使得我们能够设置网站的目录结构,其设置方法又和开发完成后实际运行的网站完全一样。它使得我们能够完全地分离不同网站的文件,不会出现搞不清某个文件属于哪个网站的混乱。此外,从开发者的角度来看,它使得我们能够在DreamWeaver中设置完全独立的网站,而不仅仅是设置同一网站的不同子目录。
最后,如果使用虚拟主机,不论我们同时开发的客户项目有多少,都无需分别为每个网站配置一个新的服务器。在任何时候这都是使用虚拟主机最主要的理由。
二、基于IP的虚拟主机(1月15日)
我们可以用两种方法设置虚拟主机。这两种方法只是服务器上配置的不同,对客户来说没有什么区别——也就是说,用户无法知道他们所使用的虚拟主机属于哪一种类型,甚至不会知道自己正在使用虚拟主机。
这两种类型分别是基于IP的(IP-based)虚拟主机和基于名称的(Name-Based)虚拟主机。简单地说,两者的区别在于:使用基于IP的虚拟主机时,每一个虚拟主机都有一个不同的IP地址,而基于名称的虚拟主机都有相同的IP地址,但它们的名称不同。两种类型各有优点,但它们的实现方法并没有什么大的差别。
在基于IP的虚拟主机环境中,同一个服务器机器上运行着多个Web网站,但每一个Web网站都有其自己的IP地址。为了实现这一点,我们首先要在操作系统上设置这些IP地址。大多数现代操作系统都允许我们为一台机器设置任意多的IP地址,具体的设置方法对每种操作系统来说都不同。本文不准备在方面作深入的介绍。如果你不熟悉如何在自己的操作系统上进行设置,请向熟悉的专家请教。一般这种设置并不是很困难。或者,你也可以跳过这种基于IP的虚拟主机,直接转入下面介绍的基于名称的虚拟主机。
有些老式的操作系统要求每个NIC(network interface card,网卡)对应一个IP地址,但现在一般不再有这种限制。
在机器上设置好多个IP地址之后,我们还要在DNS(域名服务器)中设置这些IP地址,这样DNS就能够解析我们赋予这些IP地址的名称。这里我们不准备介绍DNS记录的具体设置方法,你可以要求DNS服务器的管理员设置这些记录。
接下来要做的工作就直接和Apache有关了。假定我们已经将所有的IP地址设置到了机器上,每一个IP地址都有相应的DNS记录,要在Apache的httpd.conf配置文件中增加的内容如下所示。
这里我们假定有三个IP地址,对应的名称分别为name1.mydomain.com、name2.mydomain.com和name3.mydomain.com。当然,这里指定的名称也可以属于完全不同的域,例如www.mydomain.com 和 www.myotherdomain.com。
加入httpd.conf配置文件的内容如下所示:




2006/04/16 21:27 | by 









