如何优化Apache服务静态内容的速度?

我很清楚ngix对于静态内容更好,但是我不能使用它。 否则,我可以完全访问我的服务器(VPS)。

我发现了很多关于优化Apache的文章和文章,但总是关于PHP应用程序的性能

我正在使用最新的Apache 2.4.7

我已经在使用MPM了。 我正在考虑调整KeepAlive MaxClients等(静态内容)的性能,如果它有任何意义?

在尝试调整Apache之前,请确保您有适当的监视,以便查看Apache提供的请求数量以及系统资源如何相互关联。 一个易于使用的解决scheme是munin 。

接下来,准备负载testing,您可以将您的系统置于负载下,查看不同的调优选项具有的效果。 这里有相当多的解决scheme,从简单的JMeter到基于云的解决scheme,可以模拟来自世界各地的数千名访问者。 search“网站负载testing”,你会发现很多解决scheme。

最后,在调整Apache时,以下是我认为重要的几点:

  • 删除未使用的模块:使用apache2ctl -M查看哪些模块已加载。 如果不需要标记(shared)模块,应该删除。 这将减lessApache的内存占用,并让您的操作系统使用可用的RAM用于其他目的(例如caching)。

  • 不要使用.htaccess文件:将所有设置放在Apacheconfiguration中,并设置AllowOverride None这样Apache不必查找.htaccess文件,并在提供请求时parsing它们。

  • 显式允许符号链接:通过设置Options +FollowSymLinks -SymLinksIfOwnerMatch ,告诉Apache允许符号链接,这样它就可以自由地为它读取的文件提供服务,而不必validation它们是否是符号链接。 这节省了一些系统调用。

  • 根据您的监控需求,请考虑closuresExtendedStatus :这将节省一些系统调用,但会减less监控信息。 不知道这是否真的值得。

  • 避免过多的日志logging:logging每个请求可能会导致相当多的I / O。 使用select性日志logging可以控制要logging的请求。 以下内容只会logging以.html结尾的url的请求:

     SetEnvIf Request_URI ".html$" dolog CustomLog /var/log/apache2/access.log combined env=dolog 
  • 如果您不需要SSL,请考虑使用Event MPM,这会导致更高效地处理开放连接(例如,由于keepalive)。 如果您需要SSL,则Event MPM的function与Worker MPM相同。 请参阅如何select使用哪个Apache MPM? 有关不同MPM模块的更多信息。

  • 压缩甚至预压缩数据:通过使用mod_deflate内容在被发送到客户端之前被压缩。 由于您拥有静态数据,因此可能需要预压缩内容,而不是一遍又一遍压缩相同的数据。 请参阅http://httpd.apache.org/docs/2.4/mod/mod_deflate.html#precompressed关于如何完成此操作。

  • 调整操作系统:使用大的TCP写入缓冲区,因此需要更less的系统调用将所请求的数据提交给客户端。 同时确保打开文件的最大数量足够高,以便Apache不会遇到这个限制。

KeepAlive通常很有意义,需要更多的内存,但会降低连接数,CPU使用率和连接开销。 MaxClients和其他的东西,必须调整到你的情况。 通常情况下,你会希望Apache拥有足够大的空闲实例来为所有的用户提供服务,而不必一直产生新的subprocess; 同时你想避免maxclients过多的值,以保持内存使用的控制。 除非你有突然的使用率峰值,默认的Apache设置通常是足够的,并且会自我适应你的环境。

如果你通过https提供内容,并且因为你不使用php,你可能也想试试mod_spdy模块,许多浏览器已经支持(等待http 2.0的全球支持)。

最后另一种select是使用caching/预caching。 在这方面,一些function已经可以在Apache中得益于几个模块(请参阅http://httpd.apache.org/docs/2.4/caching.html ),或者你可以在服务器前面加上别的东西(Varnish是一个受欢迎的选项)。