解决Nginx网关超时出现504 GATEWAY TIMEOUT的问题

  目录

  一、背景

  最近遇到一个问题504 GATEWAY TIMEOUT的问题,在浏览器的NetWork里面看是这个效果。时间大概是60s。

  二、问题排查与解决

  2.1 修改nginx配置

  目前后端技术架构主要是nginx和php-fpm,前端主要是vue框架打包发布。

  于是首先想到了是nginx超时时间或者与php的超时时间设置的过段,然后配置nginx.conf设置了这些参数。

  http {

  ...

  fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

  fastcgi_read_timeout 300;

  proxy_connect_timeout 300;

  proxy_read_timeout 300;

  proxy_send_timeout 300;

  keepalive_timeout 300;

  ...

  }

  nginx -s reload

  2.2 修改PHP配置

  然后发现并没有解决问题,504 GATEWAY TIMEOUT仍然在请求60秒左右被返回。然后又想到php的配置问题,决定调整一下php的一些参数。

  vim /etc/php.ini

  max_execution_time = 300 //设置执行时间为300秒保存

  service php-fpm restart

  // 然后去代码里面设置

  set_time_limit(300);

  2.3 进一步调整

  经过了上面PHP的设置,发现也没有什么用,该超时还是超时。针对于一般的情况来说,上面的操作一般就能解决问题了。

  然后又开始怀疑是不是vue框架本身的request有一个默认的超时。

  于是通过浏览器把请求通过curl拿出来,去命令行执行。发现经过1分钟还是超时。

  到现在为止实际上还是没有解决问题。于是比较头疼。

  2.4 找到原因

  接着分析原因。看是否域名访问后的第一步没有直接到服务器。

  1. 在服务器上面执行如下命令,查看机器ip,得到ip A

  curl ifconfig.me

  2. 然后使用ping命令查看域名指向得到ip B

  ping 你的域名

  3. 发现A和B不一样,问题终于找到了,说明域名是经过中转才到达我们的服务器

  真实的超时是在B机器上面,而不是我们自己的服务器,所以这就是为啥上面的一系列调整没有生效的原因。

  4. 马上来测试一下。`windows + R` 输入 `C:WINDOWSsystem32driversetc` 回车,找到`hosts`文件。

  5. 打开`hosts` 末尾追加`ipA 你的域名`。然后保存。这样就让域名直接指向了我们自己的服务器。

  然后在进行请求,发现请求时长就可以超过60秒了。也没有再出现504 GATEWAY TIMEOUT的情况。

  三、网上其他该问题的原因

  3.1 PHP 执行时间过长

  当 PHP 脚本的执行时间超过了 Nginx 配置中设置的超时时间时,会导致 Gateway Timeout 错误。可以通过增加 fastcgi_read_timeout 配置项来延长超时时间。

  3.2 后端服务错误

  如果 PHP 后端服务发生了错误,并且没有及时返回响应,那么 Nginx 就会在超时时间内等待,然后抛出 Gateway Timeout 错误。可以通过检查 PHP 代码和日志来解决这个问题。

  3.3 PHP-FPM 配置问题

  PHP-FPM 是一种常用的 PHP FastCGI 管理器,在配置不正确的情况下可能会导致 Gateway Timeout 错误。可以通过检查 PHP-FPM 配置文件(通常位于 /etc/php-fpm.conf 或 /etc/php-fpm.d/www.conf)来解决问题。

  3.4 Nginx 配置问题

  Nginx 的配置文件也可能会导致 Gateway Timeout 错误。可以通过检查 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)来解决问题。

  3.5 网络问题

  如果 PHP 后端服务无法正常连接或响应请求,那么也会导致 Gateway Timeout 错误。可以通过检查网络连接和防火墙设置来解决这个问题。

  总结与思考

  所以很多时候不要陷入到自己的常规思维里面去了,偶尔出去放松一下,回来或许有不一样的视角。

  以上就是解决504 GATEWAY TIMEOUT Nginx网关超时的问题的详细内容,更多关于Nginx网关超时的资料请关注脚本之家其它相关文章!

  您可能感兴趣的文章: