nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx网关超时

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

作者:黑夜开发者

这篇文章主要给大家介绍了如何解决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:\WINDOWS\system32\drivers\etc` 回车,找到`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网关超时的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文