为高流量网站优化 Apache 环境

导言

Apache HTTP 服务器由 Apache 软件基金会开发和维护,是一款免费的开源网络服务器,为全球 67% 的网站提供支持。它可靠、安全,可通过扩展和模块轻松定制,以满足多种不同环境的需求。

虽然 Nginx 是性能和效率爱好者的新宠,但 Apache 也能在各种实际情况下提供高性能。

依赖条件

  • Linux 服务器(本文中 Ubuntu 演示)
  • 访问 Apache 配置文件
  • 最重要的:服务器备份

大多数 Apache 配置文件都存储在 /etc/apache2/apache2.conf 中。如果找不到 Apache 配置文件,请咨询 VPS 提供商/主机。

可以通过以 sudo 用户身份运行以下命令来访问:

在更改每个步骤中的值后,您还应通过运行重新启动 Apache:

缩短超时时间

超时设置是数据 “发送 “或 “接收”(从客户端发送或接收)超时前的秒数。

确定理想的超时值取决于流量习惯和托管应用程序。超时过长会给网站访问者带来问题,包括使他们等待网页加载的时间更长。超时过长还会使服务器更容易受到 SlowLoris 式的 DOS 攻击。

另一方面,超时过少会导致脚本比预期提前终止。关键是要在两极之间取得平衡。

对于资源有限的服务器,我倾向于保持 100-120 的水平,而对于资源一般的服务器,我倾向于保持 60 的水平。

调整 Apache 的 KeepAlive

将 KeepAlive 设置更改为开,Apache 将允许每个连接发出一个以上的请求。这对高流量服务器非常有益,因为它有可能显著提高性能。

如果您不确定您的主机, 请在 Apache 配置文件中查找 KeepAlive,并确保它处于开启状态。

调整 Apache 的 MaxAliveRequests

AliveRequests 属性设置每个连接接受请求的最大数量。

我喜欢将数值保持在 500。增加这个数值可能会提高服务器性能,但只能提高到一定程度,因为这取决于你的资源。

配置 KeepAliveTimeout 时限

KeepAliveTimeout 表示 Apache 在最终决定关闭连接之前等待连接发出新请求的秒数。一般来说,这个数字最好保持在较低水平。

要更改限制,请在配置文件中找到 KeepAliveTimeout 并更改其值。我喜欢将值保持在 3。

启用 GZIP 压缩

Apache 的 GZIP 压缩功能有助于提高网站速度和性能,还能在发送响应时通过压缩数据减少资源使用量。以 sudo 用户身份运行以下命令安装 GZIP 模块:

安装 GZIP 模块后,必须在 .htaccess 文件中启用 GZIP。为此,请运行以下命令打开 .htaccess 文件: 如果使用不同的网络根目录。并在文件中添加以下几行:

## Enable GZIP compression HTML, CSS, JS, Text, XML, fonts

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
</IfModule>

启用 MPM 事件

事件多处理模块(MPM)旨在同时处理更多请求。它通过将一些处理工作移交给监听线程来实现这一目的,从而释放工作线程来处理新请求。这有助于提高网站或应用程序的性能。

要启用 MPM,首先需要停止 Apache 和 PHP,并禁用预分叉。为此,请运行以下命令。

停用阿帕奇

$ sudo systemctl stop apache2

To stop PHP:

$ sudo a2dismod php8.1

(根据配置更改 PHP 版本)禁用预叉式 MPM 模块:

$ sudo a2dismod mpm_prefork

最后,启用事件 MPM 模块:

$ sudo a2enmod mpm_event

这样,Apache 服务器的 MPM 事件就启用了。如果您是 Webdock 用户,则无需担心这一步,因为默认情况下它已启用,就像上面的步骤一样。

如果遇到问题,请尝试使用 Worker 或 Prefork MPM。有些人发现使用 Prefork 或 Worker 性能更快,这取决于网站类型、CPU 占用率、内存占用率等。一般来说,对于需要快速为众多访问者提供服务的高性能服务器,我总是推荐使用 MPM Event。

结论

为大流量配置 Apache 可能很棘手,因为没有特定的值适用于所有网络服务器。在更改任何设置之前,您应该了解网络服务器的要求。各种参数的推荐值并不总是最佳值,而且只在特定情况下有效。

不过,它们可以为您提供一个很好的起点,让您根据自己的要求来管理这些值。您可以在进行测试时逐步增加这些值,以观察改进情况。

在启用任何新更改之前,必须先在暂存环境中进行测试。这样,你就能确保一切正常运行,并在出现任何问题时有一个备份计划。

如果看不到任何变化,最好保留默认值。