跳至内容

使用 Apache 或 NGINX 作为 ELB 的后端服务器的最佳设置是什么?

2 分钟阅读
0

我想使用运行 Apache 或 NGINX 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例作为弹性负载均衡 (ELB) 的后端服务器。我想了解能提供最佳性能的设置。

解决方法

为获得最佳性能,请分析后端应用程序的响应时间和客户端的需求。

客户端标头超时

如果后端服务器关闭连接但未通知负载均衡器,则对于应用程序负载均衡器,您可能会收到 HTTP 502 错误。对于经典负载均衡器,您会收到 HTTP 504 错误。

为防止空闲连接,请将您的应用程序超时值设置为高于空闲超时值。要为 Apache 配置应用程序超时,请参阅 Apache 网站上的 TimeOut directive(TimeOut 指令)。对于 NGINX,请参阅 NGINX 网站上的 client_header_timeout

Keepalive

要降低 CPU 使用率并缩短响应时间,请启用 keepalive。启用 keepalive 时,负载均衡器不会为每个 HTTP 请求建立新的 TCP 连接。

要为 Apache 启用 keepalive,请参阅 Apache 网站上的 KeepAlive directive(KeepAlive 指令)。要在 NGINX 中启用 keepalive,请将 keepalive_disable 设置为 none。有关详细信息,请参阅 NGINX 网站上的 keepalive_disable

启用 keepalive 选项时,请将 keepalive 超时时间设置为长于负载均衡器的空闲超时时间。要在 Apache 中配置超时,请参阅 Apache 网站上的 KeepAliveTimeout directive(KeepAliveTimeout 指令)。对于 NGINX,请参阅 NGINX 网站上的 keepalive_timeout

读取超时

根据应用程序响应时间设置合适的读取超时时间。负载均衡器必须保持连接打开足够长的时间,以便接收请求的标头和正文。

**注意:**请确保负载均衡器空闲超时值低于后端超时值。

要在 Apache 中设置请求读取超时,请参阅 RequestReadTimeout directive(RequestReadTimeout 指令)。要在 NGINX 中设置客户端标头超时,请参阅 NGINX 网站上的 client_header_timeout。要在 NGINX 中设置客户端正文超时,请参阅 NGINX 网站上的 client_body_timeout

keepalive 请求的最大数量

当启用 keepalive 时,请将单个 TCP 连接处理的请求数量设置为 100 或更高。要在 Apache 中设置请求数量,请参阅 Apache 网站上的 MaxKeepAliveRequests directive(MaxKeepAliveRequests 指令)。对于 NGINX,请参阅 NGINX 网站上的 keepalive_requests

AcceptFilter

默认情况下,AcceptFilter 处于启用状态。AcceptFilter 会告知 Apache 对连接使用 TCP_DEFER_ACCEPT 选项,这可能会导致 TCP 套接字处于半开状态。当 TCP 套接字保持半开状态时,负载均衡器会认为连接已建立,但后端实例并未完全建立连接。半开连接在低流量的负载均衡器中更为常见,在这些负载均衡器中,连接在使用前会处于空闲状态。

要在 Apache 中配置 AcceptFilter,请参阅 Apache 网站上的 AcceptFilter directive(AcceptFilter 指令)。对于 NGINX,请参阅 NGINX 网站上的 listen

日志记录

要启用 %{X-Forwarded-For}i 选项,以便 Apache 在每个请求的日志中显示 ELB x-forwarded-for 标头,请运行以下命令:

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

ELB x-forwarded-for 标头包含原始客户端的 IP 地址。%D 选项会将完成每个请求所需的时间添加到访问日志中。

Apache MPM

Apache 的事件多处理模块 (MPM) 可能会过早关闭来自负载均衡器的连接,从而导致应用程序负载均衡器返回 HTTP 502 错误。对于经典负载均衡器,您会收到 HTTP 504 错误。

最佳做法是改用 Worker MPM。

**注意:**更新配置后,请重启 Apache 或 NGINX。

相关信息

经典负载均衡器的已注册实例

配置您的经典负载均衡器

AWS 官方已更新 6 个月前