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

1 分钟阅读
0

我希望使用运行 Apache 或 NGINX 的 Amazon Elastic Compute Cloud(Amazon EC2)实例作为 Elastic Load Balancing(ELB)的后端服务器。但是,我不知道要使用哪些设置来获得最佳性能。

解决方法

负载均衡器的最佳设置取决于您的使用案例。要实现最佳性能,需要分析后端应用程序的响应时间以及客户端的要求。

如果后端应用程序正在运行 Apache 或 NGINX,请查看以下参数:

客户端标头超时(在 Apache 中为 Timeout;在 NGINX 中为 client_header_timeout):
将应用程序超时值设置为高于负载均衡器的空闲超时值。这样做可以确保负载均衡器正确关闭空闲连接。如果后端服务器在未通知负载均衡器的情况下终止连接,则会收到 504 错误。

保持活动(在 Apache 中为 KeepAlive;在 NGINX 中为 keepalive_disable):
启用保持活动以减少 CPU 占用率并改善响应时间。启用保持活动时,负载均衡器无需为每个 HTTP 请求建立新的 TCP 连接。

保持活动超时(在 Apache 中为 KeepAliveTimeout;在 NGINX 中为 keepalive_timeout):

如果启用保持活动选项,请选择比负载均衡器空闲超时更长的保持活动超时。

读取超时(在 Apache 中为 RequestReadTimeout;在 NGINX 中为 client_header_timeoutclient_body_timeout):
设置适合应用程序响应时间的读取超时。这样做可以确保您的负载均衡器保持连接打开足够长的时间,以便接收请求的标头和正文。

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

保持活动请求的最大数量(在 Apache 中为 MaxKeepAliveRequests;在 NGINX 中为 keepalive_requests):
在启用保持活动之后,此选项设置单个 TCP 连接处理的请求数。为了更好地利用资源,请将保持活动请求的最大数量设置为 100 或更高。

AcceptFilter(在 Apache 中为 AcceptFilter;在 NGINX 中为 accept_filter):
AcceptFilter 默认情况下处于启用状态,指示 Apache 对连接使用 TCP_DEFER_ACCEPT 选项。此设置可能导致 TCP 套接字处于“半开放”状态。在此状态下,负载均衡器假定已建立连接,但后端实例实际上并没有建立连接。半开放连接在低容量负载均衡器中更为常见,在这些负载均衡器中,连接在使用之前已经“陈旧”。

日志记录:启用 %{X-Forwarded-For}i 选项,使 Apache 在其日志中显示每个请求的 ELB x-forwarded-for 标头。此标头包含原始客户端的 IP 地址。%D 选项将完成每个请求所花的时间添加到访问日志中:

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

Apache:Apache MPM 事件模块可能会过早地关闭与负载均衡器的连接。过早关闭连接会对应用程序负载均衡器生成 HTTP 502 错误,并对经典负载均衡器生成 HTTP 504 错误。最佳做法是改用 MPM 工作线程模块来减少这种行为。

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


相关信息

Classic Load Balancer 的已注册实例

配置 Classic Load Balancer

AWS 官方
AWS 官方已更新 1 年前