502:Bad Gateway,意为网关错误,这就是说你访问的Web服务器充当的是一个网关或者代理角色(比如我们例子中的Nginx反代),当Nginx从上游服务器收到无效响应的时候会产生该状态码。最后一句“从上游服务器收到无效响应”,可以看出一切的首先是得先能找到上游服务器,如果都找不到服务器那么响应的有效与否就无从谈起,其次是无效响应。在我们的例子中,Nginx可以通过IP找到后端,在后端进行响应的时候后端发生问题,这种情况就包括端口无效或者端口有效建立了连接但是后端进程处理时候发生问题导致中断了连接。在这些情况下Nginx收到的响应都不是后端应用发给它的,都是后端服务器发给的,进一步说就是后端服务器内核中的TCP/IP协议栈发给Nginx的。所以它的关注点不在时间维度上而是无效响应这个点。
504:Gateway Timeout,意为网关超时,扮演网关和代理的服务器无法在规定时间内得到有效响应。这里你就可以看出区别,502是无效响应,504是有效响应。但504的定义中有一个时间概念,所以它关注的点是时间,如果在规定时间内得到响应,无论是有效的还是无效的,那么其状态码一定不是504,如果是有效数据则状态码是2XX、3XX或者是4XX,如果是无效数据那么就是502。
其实Nginx为什么产生499、502或者504你去看看错误日志就知道了,就可以做一个归类。面对这种问题你先不要想后端是怎么回事,大家的后端千差万别。不要被别人代跑。