一次NGINX 504 Gateway Time-out错误排查和解决可能涉及到多个原因和步骤,下面我将详细介绍一下完整的攻略。
1. 什么是504 Gateway Time-out错误
当我们访问一个Web站点的时候,我们的浏览器会向Web服务器发送请求。Web服务器通常与一个应用服务器连接,如PHP-FPM、Django等,以处理请求和生成响应。在一些情况下,应用程序需要处理的时间超过了Web服务器的设置的超时时间,比如默认的超时时间是60s,如果请求处理时间超过了60s,就会返回一个“504 Gateway Time-out”错误。
2. 阅读NGINX错误日志
当我们遇到一个“504 Gateway Time-out”错误时,首先要做的就是阅读NGINX错误日志(默认位置是/var/log/nginx/error.log)以查看更多详细信息。在日志文件中,我们可以找到错误的原因以及哪个站点出现了问题。
例如,下面是一个404错误的日志记录:
2021/08/07 11:56:09 [error] 21766#21766: *43 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.2, server: example.com, request: "GET /path/to/resource HTTP/1.1", upstream: "http://127.0.0.1:8000/path/to/resource", host: "example.com"
请注意,在NGINX错误日志中,每条错误记录都可能涉及多个应用程序服务器和站点,因此必须仔细检查记录,以找到错误记录。
3. 增加NGINX超时时间
我们可以调整NGINX的超时时间来避免504错误。我们可以在nginx.conf文件中配置以下参数:
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
fastcgi_read_timeout 600s;
这会将NGINX的代理连接超时时间、代理读取超时时间、代理发送超时时间和FastCGI读取超时时间增加到600秒。我们可以根据需要适当的调整这些值。
4. 检查应用程序服务器
当我们已经排除了NGINX超时时间的限制后,我们也需要检查应用程序服务器是否正确处理请求。可能是应用程序服务器出现了一些错误或者过多的请求导致了超时。在这种情况下,我们需要获取应用程序服务器的日志并查看所有处理请求的详细信息。
例如,假设我们的网站使用Django作为应用程序服务器,我们可以通过查看Django的日志文件/var/log/django/django.log来验证Django是否有问题。
5. 总结
在排查和解决NGINX 504 Gateway Time-out错误时,我们需要阅读NGINX错误日志、调整NGINX的超时时间、检查应用程序服务器并查看日志文件。
示例说明:
-
使用Caddy服务器代理Go应用程序,在Nginx中读取很长时间,最后返回了504错误。经过查看Nginx的错误日志,发现错误记录为:“upstream timed out while reading response header from upstream” 。通过增加nginx的代理超时时间,解决了问题。
-
在使用Nginx和Tomcat搭建Java Web时,出现了多次504错误。通过查看Tomcat的日志文件,发现问题原因是Tomcat的内存和线程池配置不足。通过修改Tomcat的配置,调整内存和线程池大小,解决了504错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一次nginx 504 Gateway Time-out错误排查、解决记录 - Python技术站