导致大量404错误的caching内容,连接太多

由于大量的stream量,我的网站在三天内基本没有响应。

页面上的JavaScript元素定期向服务器请求图像,并且由于人们打开浏览器窗口(因此从未停止请求图像),连接数量成为问题。

我重新devise了网站使用一个精灵并且只加载一次; 然而,现在有大量的404错误,因为人们仍然试图加载旧的内容。 该网站在VPS上,由于延迟而无法使用。

更糟糕的是,我最初认为延迟是由于缺lesscaching。 我向.htaccess文件添加了一个指令,以便访问者caching资源(包括旧的低效代码)。

我的主机一直无法纠正这个问题。 可以做些什么来强制持久连接停止尝试加载过时的内​​容?

你不能阻止某人向一个不存在的资源发出请求(例如,任何人都可以为一个不存在的页面组成一个URL,并获得一个404)。 但是,您可以采取一些措施来改善这种状况。

首先,更改新内容的文件名 – 如果您仍然在html中引用JavaScript文件,请确保它的名称与具有问题的名称不同,以便浏览器不会使用caching的副本。

其次,让你的404页面尽可能简单(绝对是静态页面,而不是dynamic的,非常小的)。

第三,Apache在处理大量没有大量可用内存的并发请求(它为每个请求启动一个工作线程)方面效率不高。 考虑(至less暂时)在Apache之前添加另一台服务器,以更有效地处理404请求。 一些例子可能包括:

  • nginx – 为404请求(也可能是所有静态文件)提供服务,并且proxy_pass将其他请求返回给Apache(并且还可以caching代理请求)
  • 清漆 – 它可以caching404请求并直接从内存中提供服务,从而减轻Apache的负担

我会立即开始创build一个零字节的文件,以摆脱404的和最小化每个检索的成本。

我的主机系统pipe理员用脚本解决了这个问题:

试图访问旧内容的任何IP地址(本质上,这样的用户不断发出请求并消耗连接)会立即添加到服务器的防火墙中。 到目前为止,只有几百(几千)的访问者被发现和阻止。 解决scheme工作得很好。