保护Magento免受高stream量的情况

您好我有一个Apache(PHP)(magento)脚本的服务器2.2。

在正常情况下,一个PHP页面在1-2秒内渲染,这是可以的。

有时在高stream量或粗糙的蜘蛛机器人所有的Apache插槽被阻止。

单个请求的运行速度很慢,并且使用越来越多的内存,直到mysql调用oom-killer,这杀死了我需要的tomcat。

首先我尝试了mod_evasive。 但是,如果我configuration它太严格,我不能浏览活泼,如果我configuration它太松,请求可以来得更快,那么他们可以被处理。

问题是PHP文件。 其他资源,如图像等不会妨碍插槽。

其次我试图通过降低MaxClients来限制它。 但是现在一个客户端可以阻止所有的插槽。

任何想法如何限制每个客户端的最大连接数或更好的最大simultan PHP脚本每IP …

如何configuration其他的Apache客户端,以避免更多的请求比他们可以处理,而不偏袒任何客户端?

把你的网站放在一个起源CDN( Cloudflare作为一种select,作为一种select,还有别的)。

在正常情况下,一个PHP页面在1-2秒内渲染,这是可以的。

不,这不对。

优化您的代码,使其不会花费两秒时间来生成页面。

然后caching所有的东西。

  • 使用光油caching页面请求
  • 使用Memcachedcaching数据库查找。
  • cachingCDN上的图像。
  • 使用APC或eAccelerator(或类似的操作码caching)cachingPHP级别
  • 就整个CDN而言,也要caching整个页面。

如果你还没有,把你的数据库服务器closures到一个单独的服务器上,为它指定一个内存量和超高速磁盘,然后将它们从表中caching下来。 Magento在连接等方面是一个贱货,所以你需要你的数据库服务器非常快速。

因此,当用户查看您的网站时,内容将从某处caching中取出,而不必每次生成。


我冒昧地在您的网站上运行Yslow。 以下是发现的总结(尽pipe你自己应该这样做)

  1. 减lessHTTP请求。 基本上你应该把你的JavaScript和CSS文件合并成一个,这样你就可以减less多次请求的开销。
  2. 使用内容交付networking(CDN)。 我已经在^^上面说过^^,但是Yslow告诉我有60个静态组件不在CDN上。 其中1.4MB来自www.brainyoo.de。 这使我想到..
  3. 将资产移至多个无Cookie的网域。 60个资产正在从该网站的其余部分从相同的域加载。 这意味着浏览器在加载下一个之前必须等待每一个加载。 解决这个问题的一种常见方法是将静态资产放在单独的,无cookie的域(这样请求更小,更快,并且不包含cookie信息)。
  4. 将Javascript移动到文档的底部。 考虑可伸缩,快速网站的最佳做法。
  5. 缩小Javascript和CSS。 认真。 你发送近一兆的JS和CSS,可以缩小和…
  6. 使用Gzip压缩组件。 有39个纯文本组件可以被压缩。
  7. 添加过期标题。 有63个静态文件没有远期到期date,所以它们没有被浏览器有效地caching。

总的YSlow等级D.我开始怀疑你的问题是不是完全服务器端,但可以做一个该死的好摆弄,并得到你的YSlow评级。 因为这样,a)从Apache服务器提供更less的stream量。 b)加载速度更快,所以您的访问者不会长时间lockingApache进程。

一般来说,如果magento运行缓慢或者每隔一段时间就会杀死您的服务器,那么您的服务器将会运行得更好,并且具有更高的RAM / CPU功耗。 你可以调整你的服务器运行magento顺利,但它需要一段时间和b)必要的(服务器端)资源。

你做了多less次数据库调整? magento是PITA,但可以configuration为快速,给予足够的RAM。

使用像mysql_tuner或mysql调优的入门工具来调整你的数据库。

并尽可能多地使用caching。 我不记得,如果支持APC; memcache更好。

你还应该留意IOWAIT,这是对非常不好的高清performance – 可能有不同的原因。


编辑:

如何configuration其他的Apache客户端,以避免更多的请求比他们可以处理,而不偏袒任何客户端? /我想知道其他apaches如何处理情况,当他们得到更多的请求比他们可以处理

通常你会扩大你的设置,取决于预期的stream量。 如果你的服务器在蜘蛛和爬虫被击中时发生故障,你可能有一些性能很差的脚本,或者你的服务器很小。

当我期望在我的服务器上的1000个用户,我使用一个服务器,可以处理5000个客户端(我监测max_clients达到error.log)

限速是可能的,但是你可以像使用mod_evasive一样进行相同的操作。 它确实有助于像DDOS这样的术语,但如果您需要调整您的设置,则不会。