nginx 如何将公司范围内的连接问题调试到Web应用程序?

f2uvfpb9  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(131)

我们有一个公司里很多人都需要访问的Web应用程序。有时,Web应用程序似乎停止响应请求。
例如,如果一个资源索引页(例如,orders表视图)尝试刷新资源列表,它将通过API请求数据并显示加载指示符,但请求在一段时间后以静默失败告终。这发生在多个人同时访问应用程序,但在此中断/呆滞期间从另一个网络(例如,移动的数据)似乎起作用了。其他网站在此期间似乎也没有受到影响。
浏览器网络选项卡显示请求在20- 40秒后失败,但没有状态代码。选择请求时的状态文本为failed net::ERR_CONNECTION_TIMED_OUT。看起来当你在处理请求的时候没有点击请求,然后打开细节的时候,计时选项卡会说它卡在了 Stalled 阶段。但是如果你在处理过程中打开请求细节,它会说它卡在了 * 初始连接 * 阶段。这使得请求详细信息的计时选项卡看起来不可靠,因为它显示的内容似乎取决于我是否在处理请求时检查请求。
在这段时间里,服务器似乎没有显示出严重的过载-最大30%的CPU/内存使用率。服务器运行在Digital Ocean droplet上,并使用nginx托管Laravel应用程序。应用本身确实启用了节流,但它绑定到用户ID,返回 Too many attempts 错误消息和定义的状态代码,因此如果这是节流的情况,则不应在应用级别进行节流。
我可以做些什么来调试/调查问题的来源?据我所知,这个问题可能是从nginx配置到ISP提供商节流的任何地方。我想这是某种节流的时刻,但我可能错过了什么?

sxpgvts3

sxpgvts31#

可能是默认为laravel中的所有API路由配置的RateLimiter。
看一下

app/Providers/RouteServiceProvider.php
/**
     * Configure the rate limiters for the application.
     */
    protected function configureRateLimiting(): void
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
        });
    }

欢呼

相关问题