从另一个主机名提供图像与Apache重载重写

我们正在努力进一步提高一些旧的HTML网站的速度,以获得更好的SEO结果。 我们现在已经应用了一些缩小措施,结合HTML,CSS等我们使用一个小的虚拟化基础设施,我们一直希望使用轻+标准HTTP服务器configuration,所以第一个可以提供图像和静态内容与另一个PHP ,重写等。我们可以很容易地使用虚拟机,使用相同的文件和虚拟主机(绑定挂载)在Apache的conf,但几乎没有任何模块加载。 这意味着光照httpd将有更小的指纹,使我们能够更快,更快地运行,有更多的minSpareServer运行等。

因此,当浏览器也从加载来自不同主机名称的静态内容中受益时,我们已经考虑在我们的主服务器(main.com)上build立一个重写规则来“redirect”所有图像和css * .jpg,* .gif,* .css等相同的说cdn.main.com因此浏览器能够有更多的连接。

问题是,假设我们已经有一个非常复杂的重写规则集(我们手动操纵许多旧的URL来search引擎优化)是否值得?

我的意思是将主要的Apache的额外负载必须redirectmain.com/image.jpg(我明白,我们将不得不做一个301)cdn.main.com/image.jpg +然后cdn.main.com有为了达到这个目标,要比我们在浏览器上存档的收益大吗?

一个页面上的所有图像的301多余可以通过谷歌惩罚?

大公司如何解决这个问题,原始代码是否已经包含了从cdn链接到绝对path的图像?

编辑只是为了澄清,我们的关注是不要做太多与服务器性能或带宽。 我们显然可以使用外部CDN服务器,但是我们有足够的CPU和带宽。

我们所关心的是如何让拥有大量半静态HTML内容的“旧”网站受益于通过Apache分割图像和静态内容的连接,而不必将html更改为绝对path(即image.jpg至cdn.main.com /image.jpg发生在服务器上而不是代码)

redirectmain.com/image.jpg(我明白我们必须做一个301)到cdn.main.com/image.jpg

这是一个坏主意,不要这样做。

你长期以来的问题是难以遵循的。 据我所知,你担心服务器负载,而不是你的最终用户的网站加载速度。

如果您担心服务器容量,则可以:

  • 得到一个更大的服务器或
  • 在你的HTTP服务器(Squid,Varnish,Apache Traffic Server)或者之前使用一个in-RAM代理服务器
  • 使用廉价的内容分发networking将您的静态内容caching到最终用户附近,从而减less页面加载时间和服务器负载。

从而使浏览器能够有更多的连接。

浏览器并行下载限制是一点红鲱鱼 – 现代浏览器从相同的主机名下载6-8文件并行 。 只有老的浏览器(IE6,IE7)真的受到这个限制。

如果您担心最终用户的网页加载速度,那么请使用CDN,在所有情况下,您的用户分布在广泛的地理区域(即您拥有全球用户)时,这是一个很好的build议。

一个页面上的所有图像的301s是由谷歌惩罚?

有可能。 但更有可能的是,它会受到你的用户的讨厌。 对于每个图像请求,您首先提供301,然后从另一个URL正确的图像。 这意味着每个图像需要2次往返服务器,因此用户的页面加载时间将大大延长。

在过去的几个星期里,我一直在我公司玩过类似的问题。 请记住一些事情:

  1. 浏览器的多个域名:这是一个很好的调整。 一方面,浏览器限制了可以从同一个域同时加载多less资源(在这方面,要加载的域越多越好)。 另一方面,您呼叫的每个域名都需要DNS查询,这可能会影响加载速度。 我一直在使用5个不同领域的经验法则,我自己。
  2. 接下来,如果我正在阅读你的描述(而且我仍然在喝咖啡,所以我可能不会),你仍然会向“main.com”发出最初的请求,并有“沉重的”apacheredirect到“光”阿帕奇。 这根本不会帮你。 如果你走这条路线,最好是将“main.com”设置为light apache,并将“ 反向代理”的任何非静态内容都设置为“重”的apache。
  3. 然而,2号并没有充分利用“多域”的改进,因为所有请求都通过域main.com推送。 因此,我们所做的就是将cdn.main.com设置为“light”apache,并将其内部redirect到相应的资源。 你也可以检查出mod_cache 。

通常情况下,每月使用20TB可用带宽的服务器成本要比CDN收取相同数量的stream量费用要less得多(好吧,由于CDN的传播速度可能更快,但在任何情况下都不便宜)

无论如何,我正在尝试以下设置(如果您认为我可能在这里有什么问题,请评论这个)

http://www.server.com运行所有的PHP / MySQL的东西,并提供static.server.com所有的静态文件(图像,CSS等)。 (我已经设置了所有的基础url地址的variables,所以我可以改变他们的意志)在static.server.com将有一个重写规则,以检查图像是否存在本地,如果没有,从http://www.server .com通过shell脚本/ scp / rsync命令。 然后,下一次它将被要求,它将已经在那里。 因此,该特定图像/文件不需要第二重写规则。 您将始终可以select只更改一个保存静态内容path的variables,并再次从主服务器提供所有内容。 图像也将在那里。

这样,图像调用直接到我的静态服务器和所有其他的东西去的PHP / MySQL之一。 如果你不在静态服务器上运行任何PHP,那么进程将不会变得非常大,所以你可以有更多的服务器并行运行来为你的映像服务,并且不会占用主计算机的带宽。

如果你看到很多CPU在你的静态服务器上浪费了,你可以随时移动你的mysql,这样你就可以平衡两者之间的负载。

对于上面的例子,你可以检查一下(这几乎是一样的)

http://mrphp.com.au/code/image-cache-using-phpthumb-and-modrewrite 

编辑:我说的是在这里使用两个单独的服务器(和物理位置足够接近的情况下,mysql在另一台服务器上)


我应该在上面添加的另一件事是你可以在static.server.com上有一个DNS条目指向你想要的任何服务器。 (即使与应用程序的其余部分一样)。 所以你可以硬编码静态内容的地址,例如static.server.com/image1.jpg 。 应用上面的解决scheme只需要设置DNS条目,将static.server.com域指向您的caching机器。