调试功能

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

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

    1. $ curl http://127.0.0.1:9080/hello -v
    2. ......
    3. < HTTP/1.1 502 Bad Gateway
    4. < Date: Wed, 25 Nov 2020 14:40:22 GMT
    5. < Content-Type: text/html; charset=utf-8
    6. < Content-Length: 154
    7. < Connection: keep-alive
    8. < Server: APISIX/2.0
    9. <
    10. <html>
    11. <head><title>502 Bad Gateway</title></head>
    12. <body>
    13. <center><h1>502 Bad Gateway</h1></center>
    14. <hr><center>openresty</center>
    15. </body>
    16. </html>

    具有 的响应头。

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

    1. $ curl http://127.0.0.1:9080/hello -v
    2. ......
    3. < HTTP/1.1 500 Internal Server Error
    4. < Content-Type: text/plain; charset=utf-8
    5. < Transfer-Encoding: chunked
    6. < Connection: keep-alive
    7. < Server: APISIX/2.0
    8. <
    9. Fault Injection!

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

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

    1. $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    2. {
    3. "uri": "/hello",
    4. "upstream_id": "1"

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