Skip to main content
Version: Next

调试功能

5xx 响应状态码#

500、502、503等类似的 5xx 状态码,是由于服务器错误而响应的状态码,当一个请求出现 5xx 状态码时;它可能来源于 APISIXUpstream 。如何识别这些响应状态码的来源,是一件很有意义的事,它能够快速的帮助我们确定问题的所在。

如何识别 5xx 响应状态码的来源#

在请求的响应头中,通过 X-APISIX-Upstream-Status 这个响应头,我们可以有效的识别 5xx 状态码的来源。当 5xx 状态码来源于 Upstream 时,在响应头中可以看到 X-APISIX-Upstream-Status 这个响应头,并且这个响应头的值为响应的状态码。当 5xx 状态码来源于 APISIX 时,响应头中没有 X-APISIX-Upstream-Status 的响应头信息。也就是只有 5xx 状态码来源于 Upstream 时,才会有 X-APISIX-Upstream-Status 响应头。

示例#

示例1:502 响应状态码来源于 Upstream (IP地址不可用)

$ curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "methods": ["GET"],    "upstream": {        "nodes": {            "127.0.0.1:1": 1        },        "type": "roundrobin"    },    "uri": "/hello"}'

测试:

$ curl http://127.0.0.1:9080/hello -v......< HTTP/1.1 502 Bad Gateway< Date: Wed, 25 Nov 2020 14:40:22 GMT< Content-Type: text/html; charset=utf-8< Content-Length: 154< Connection: keep-alive< Server: APISIX/2.0< X-APISIX-Upstream-Status: 502<<html><head><title>502 Bad Gateway</title></head><body><center><h1>502 Bad Gateway</h1></center><hr><center>openresty</center></body></html>

具有 X-APISIX-Upstream-Status: 502 的响应头。

示例2: 502 响应状态码来源于 APISIX

$ curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "plugins": {        "fault-injection": {            "abort": {                "http_status": 500,                "body": "Fault Injection!\n"            }        }    },    "uri": "/hello"}'

测试:

$ curl http://127.0.0.1:9080/hello -v......< HTTP/1.1 500 Internal Server Error< Date: Wed, 25 Nov 2020 14:50:20 GMT< Content-Type: text/plain; charset=utf-8< Transfer-Encoding: chunked< Connection: keep-alive< Server: APISIX/2.0<Fault Injection!

没有 X-APISIX-Upstream-Status 的响应头。

示例3:Upstream 具有多节点,并且所有节点不可用

$ curl http://127.0.0.1:9080/apisix/admin/upstreams/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "nodes": {        "127.0.0.3:1": 1,        "127.0.0.2:1": 1,        "127.0.0.1:1": 1    },    "retries": 2,    "type": "roundrobin"}'
$ curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "uri": "/hello",    "upstream_id": "1"}'

测试:

$ curl http://127.0.0.1:9080/hello -v< HTTP/1.1 502 Bad Gateway< Date: Wed, 25 Nov 2020 15:07:34 GMT< Content-Type: text/html; charset=utf-8< Content-Length: 154< Connection: keep-alive< Server: APISIX/2.0< X-APISIX-Upstream-Status: 502, 502, 502<<html><head><title>502 Bad Gateway</title></head><body><center><h1>502 Bad Gateway</h1></center><hr><center>openresty</center></body></html>

具有 X-APISIX-Upstream-Status: 502, 502, 502 的响应头。