玩WordPress » 技巧方法 » 2009 » 01 » 19 » 针对WordPress对你的Apache VPS进行优化

针对WordPress对你的Apache VPS进行优化

English原文链接:Optimize your Apache VPS for WordPress
翻译:冰古

如果你决定要把你的WordPress从共享主机搬到一个新的VPS上,你应该考虑着该怎样改进你的httpd.conf文档,从而达到优化Apache的目的。Apache是快捷、可靠而灵活的服务器,但默认设置对资源的要求比较高,如果你购买的是个小VPS,而在上面仅仅运行一个WordPress,你可以通过改变设置,获得一些有效的性能提高。

削减模块

用你熟悉的文本编辑器打开服务器上的httpd.conf文档,找到一排以LoadModule为开头的行。类似于这样:

# Example:
# LoadModule foo_module modules/mod_foo.so
# LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so

找到的行可能会比上面列出的多得多。你可以通过“注释它们”的方法来关闭那些不需要的模块,也就是在不需要的模块所在行的前面添加一个“#”字符,例如:

# LoadModule auth_basic_module modules/mod_auth_basic.so

你将关闭一大堆一个基本的WordPress网站不需要用到的模块。事实上,我建议你注释掉除了下面列出的模块之外的所有模块:

LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

下面是你可能注释掉的一行:

LoadModule negotiation_module modules/mod_negotiation.so

mod_negotiation提供了一些你不需要的函数:自动完成输入错误的链接,提供多种语言选择的网站,也会用到这个模块。如果你的网站提供了多种语言选择,你就不要注释掉这个模块了。

当你注释掉了mod_negotiation.so模块,找到下面的两行(它们在不同的位置),注释掉,进而获得更多的性能提高:

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback

关闭这些模块后重启服务器,你将看到明显的性能提升。是的,它们消耗了一大块你有限的系统资源。

Apache MPM Prefork模块

另一个方便的改进就是对Apache MPM prefork模块进行调整。这里假设你的Apache运行在prefork模式下(如果你的服务器是个小VPS,强烈推荐使用该模式)。

这个模块将对Apache开始运行的进程和空闲进程数量进行控制和优化。当你使用小VPS来处理MySQL和Apache时,这个模块显得尤其重要。除非你的网站有繁忙的流量导致VPS的过载,你就不必运行于默认设置下(你时,你需要一台独立主机)。在你的httpd.conf文件中找到下面的几行:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

MinSpareserversMaxSpareServers分别设置空闲子进程的最小和最大数量,StartServers设置了服务器启动时建立的子进程数量。

ServerLimit则是控制MaxClients所能使用的最大值。缩减MaxClients能让运行动态内容(比如:WordPress)的服务器有很大的改变。如果你的VPS遭遇到流量的大幅增加,而你的MaxClients设置的太高的话,你的服务器将会无限循环工作于从物理内存交换页面到虚拟内存中,最终导致宕机。一般计算适当的MaxClients值取决于你总共可用的系统内存除于每个Apache进程使用的内存。例如,如果你还有500MB的内存可用于Apache,每个Apache进程大约使用20MB的内存,你可以设置你的MaxClients为(512-12)/ 10 = 50(这个计算好像原文中有误)。使用命令top可以得到你VPS实时内存的使用。

MaxRequestsPerChild设置每个子进程在其生存期内允许伺服的最大请求数量。我们可以安全地缩减此项值,从而得到一个小的提升。

那么让我们开始减小这些值吧:

<IfModule prefork.c>
StartServers       3
MinSpareServers    3
MaxSpareServers   10
ServerLimit      50
MaxClients       50
MaxRequestsPerChild  2000
</IfModule>

需要注意的是:这些不是“最好”的值,它们要根据你的VPS的大小和你的Apache进程大小等来决定。

最优化KeepAlive

KeepAlive允许你的访问者在同一个TCP连接上完成多个请求,理论上它有助于提升反应时间,因为你的访问者可以在同一个连接上请求你的网页,图片和javascripts。遗憾地是,Apache对于每个请求都需要一个工作进程去处理。默认的每个工作进程将持续打开15秒来处理每个请求,即使你的访问者已经不再使用它了!这也就意味着你的系统在任何时间都是缺少工作进程的。我们都希望我们那只有有限资源的小VPS能有确实在工作的工作进程。实现的方法之一是关闭KeepAlive。在你的httpd.conf文件中找到下面的一行:

KeepAlive On

然后将它改变为:

KeepAlive Off

如果你的网站有大量的图片和javascripts,通常最好还是让KeepAlive保持打开,然后做些调整。

如果你决定让KeepAlive保持打开状态,改变默认的KeepAliveTimeout值就显得很重要了。它能避免连接没有在使用时仍然打开。在你的httpd.conf文件中找到下面一行:

KeepAliveTimeout 15

你只希望连接打开2秒钟,这已经足够用户打开大部分必须的文件。所以改变此行为:

KeepAliveTimeout 2

如果你希望让KeepAlive保持打开状态,同时应该增加MaxKeepAliveRequests。设置它为更大的值让每个连接可以处理更多的请求,从而增加效率。找到这行:

MaxKeepAliveRequests 100

改变为:

MaxKeepAliveRequests 200

调整Timeout

另一个较小的调整是改变TimeOut指令,这个调整可以得到小的性能提升和减小DDOS攻击的效果。这个指令用于设置Apache当接收新请求,处理请求和返回响应前需等待多少秒。找到这行:

Timeout 120

改变为:

Timeout 40

重启Apache,感受性能的提升吧!

现在重启Apache,感受性能的提升吧!请别忘了经常备份你的httpd.conof文档,以便有错误出现时你可以恢复到改变之前的状态。请注意这里仅仅是一些简单的设置,如果你的服务器因为它们而出现问题我们将不负相关的责任。

扩展阅读

Comments are closed.