记录一次前端接口504问题排查

1,270 阅读2分钟

问题

在开发环境,进行文件上传校验的接口时,发现一到60s就504超时了

image.png

响应体是404的内容信息

image.png

有可能造成的原因

1. 前端 ajax 请求进行了设置

由于只有开发环境有504错误,线上是可以的,都是一套代码,所以排除是代码层原因

2.Nginx 没有配置超时时间

从其他环境copy了一份,最大超时的限制。然后systemctl restart nginx 进行了重启,发现没起作用

location /api/backend/ {
    proxy_pass http://**.**.**.**:**/v2/;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $http_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
  
    client_max_body_size 1024M;
    # nginx跟后端服务器连接超时时间
    proxy_connect_timeout 300s;
    # 后端服务器数据回传超时时间
    proxy_send_timeout 300s;
    # 连接成功后,后端服务器响应超时时间
    proxy_read_timeout 300s;
}

网上还有说是client_body_timeout 或者 设置最大缓存的,但感觉不是那个问题;

所以先看下是不是生效的不是这个配置文件。

先使用nginx -t查看一下:

image.png

发现果然不是我改的文件。但是当我查看了/usr/local/nginx/conf/nginx.conf 这个文件内容后,肯定了生效的也不会是这个文件,里面内容很少。

所以,上面命令获取到的不准!!!


再使用systemctl status nginx 查看一下

这个还是比较可信的,是修改的配置文件。

image.png

那为啥不好使,难道是其他后端的设置?咨询了相关后端同学,发现并没有。。。

并且后端同学使用postman,通过微前端以前的一个老域名调用,发现是没有时间限制的。就是说只有新域名不行。

公司各个环境的请求,都是先通过运维进行域名解析,然后再分发到各个机器的。

  1. 就是说域名访问,第一层先通过运维那边的 n 机,他那边配置域名转发到我们这的 n 机监听的端口上;
  2. 既然其他域名可以通,大概就是中间某一层限制了,所以先从域名转发第一层查

3.运维转发层 nginx 设置

问了运维同学,果然是他那边设置了60s 限制,改成5分钟,就可以了。

image.png

大功告成!!顺带粘一下,有个博主解答的

image.png