在Docker之后运行的Nginx上的随机502/503错误(在ECS群集+ ALB上)

时间:2018-11-20 08:50:46

标签: laravel amazon-web-services docker nginx amazon-ecs

因此,我已经设置了一个laravel应用程序,并托管在一个泊坞窗中,该泊坞窗使用运行在ALB后面的AWS ECS群集进行了托管。

到目前为止,我已经按照预期的方式启动了应用程序,并且一切正常运行(例如,会话存储在memcached中并且可以正常工作,静态资产位于S3存储桶中,等等)。

现在我只遇到1个稳定性问题,而且我不确定自己到底在哪里。当我访问我的URL /网站时,有时(随机)返回502/503 HTTP错误。发生这种情况时,我必须等待大约一分钟或2分钟,然后该应用才能返回200个HTTP代码。

这是在docker上做尾巴的结果(即nginx日志)

enter image description here

在这一点上,我完全迷失了方向,不确定是否应该检查其他地方。我尝试了以下方法:

  1. 在本地运行它,使用相同的docker / nginx >>效果很好。
  2. 在没有ALB的情况下(即仅使用1个EC2)运行>>有类似问题。
  3. 使用ALB在2种不同的EC2类型(即t2.small和micro)上都具有类似问题。
  4. 仅在1个EC2上使用ALB运行它>>有类似问题。

2 个答案:

答案 0 :(得分:1)

根据您的日志,ngjnx在ALB健康检查请求中回答401未经授权。您必须在/端点中回答200 OK,或在ALB目标组中配置一个类似/ping的端点。

使用控制台检查目标的运行状况

  
      
  1. 通过https://console.aws.amazon.com/ec2/打开Amazon EC2控制台。

  2.   
  3. 在导航窗格上的LOAD BALANCING下,选择目标组。

  4.   
  5. 选择目标组。

  6.   
  7. 在“目标”选项卡上,“状态”列指示每个目标的状态。

  8.   
  9. 如果状态为“健康”以外的任何值,请查看工具提示以获取更多信息。

  10.   

更多信息:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html

答案 1 :(得分:0)

过去,由于几种可能的原因之一,我遇到过类似的问题;

    为ALB配置的
  • 运行状况检查,例如ALB正在等待配置的检查数变为绿色(例如,每30秒击中一个端点并等待200次4/5次。在“不健康阶段”,该实例可能被指定为脱机。这通常最常发生)重新启动或部署后,或者实例运行不正常后,会立即出现。
  • NGINX中的DNS。如果NGINX代理的下游服务的DNS记录已更改,则可能是NGINX已缓存(根据TTL或更长的时间,具体取决于您的配置),因此旧记录因此无法连接到下游。 / li>

为帮助完全调试,可能值得确定502/503是来自ALB还是NGINX。您也许可以通过ALB的访问日志或容器中的/var/log/nginx/access|error.log来确定这一点。

检查是否也有帮助,响应上是否有响应主体?