2

好的,这就是场景。我们将 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 Forbidden 的机会接近 0%。

在这里完全不知所措。任何想法将不胜感激。

4

1 回答 1

0

所以事实证明,这一直是mod_security的错。我不知道他们是如何错过告诉我 mod_security 实际安装在后端服务器中的关键细节的,这就是请求被拦截的地方。

我们最终将 mod_security 上的一些规则列入了白名单,这样它就不会严重破坏从外部来源进行的一些 API 调用。

于 2019-10-11T06:52:38.343 回答