【发布时间】:2020-02-07 22:04:09
【问题描述】:
好的,这就是场景。我们将 API 请求发送到 NGINX 服务器,然后将其重定向到 AWS Elastic Load Balancer,该负载均衡器的目标指向我们的后端服务器。后端服务器处理请求,返回响应。没什么特别的吧?
嗯,无论出于何种原因,有时来自特定 API 资源的 POST 请求以 403 结尾。我们在代理服务器日志 (/var/log/nginx/access.log) 中看到返回了 403 ,然后负载均衡器日志(访问日志、写入 S3)也显示 403。但是,后端服务器 (catalina.out) 中根本没有日志表明请求甚至到达。 这让我相信负载均衡器以某种方式丢弃了一些请求,并且从未将其发送到后端。 当然,这只是表面级别的假设。我真的不确定请求在哪里卡住/被丢弃。
需要注意的是,在 403 场景中,我们的请求返回 403 只需要不到 60 毫秒。如果返回 200,通常需要大约 250 毫秒。因此,负载均衡器似乎根本没有尝试将其带到后端服务器,只是假设某个地方出现了 403。
间歇性只会让问题变得更糟,因为查明问题更加困难。
我们实际上已经尝试迁移到现代应用程序负载均衡器,并且有一段时间这个问题慢慢平息了。但现在,即使使用更新的负载均衡器,我们也会再次出现间歇性 403。
问题已经存在将近一年了,但仍未找到将 403 禁止机会接近 0% 的解决方案。
在这里完全不知所措。任何想法将不胜感激。
【问题讨论】:
-
ELB 日志呢?它们是否与您的负载均衡器同时显示 403?另外,你能检查一下你的 nginx 配置中是否有任何奇怪的
if语句吗?示例:if ($http_referer ~* (xxx|yyy)) { return 403; }我正在运行您所描述的 2 个设置,但从未见过任何此类设置。如果您的 nginx 配置是干净的,那么我将寻找的下一个地方是任何 WAF 或 ACL 的 ELB。之后,后端,但你说那里没有记录任何请求,所以你的问题必须是 ELB 或 nginx 配置
标签: nginx tomcat7 http-status-code-403 amazon-elb intermittent