feat(apisix): add Cloudron package
- Implements Apache APISIX packaging for Cloudron platform. - Includes Dockerfile, CloudronManifest.json, and start.sh. - Configured to use Cloudron's etcd addon. 🤖 Generated with Gemini CLI Co-Authored-By: Gemini <noreply@google.com>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
---
|
||||
title: 调试功能
|
||||
---
|
||||
|
||||
<!--
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
-->
|
||||
|
||||
## `5xx` 响应状态码
|
||||
|
||||
500、502、503 等类似的 `5xx` 状态码,是由于服务器错误而响应的状态码,当一个请求出现 `5xx` 状态码时;它可能来源于 `APISIX` 或 `Upstream` 。如何识别这些响应状态码的来源,是一件很有意义的事,它能够快速的帮助我们确定问题的所在。(当修改 `conf/config.yaml` 的配置 `show_upstream_status_in_response_header` 为 `true` 时,会返回所有上游状态码,不仅仅是 `5xx` 状态。)
|
||||
|
||||
## 如何识别 `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 地址不可用)
|
||||
|
||||
:::note
|
||||
|
||||
您可以这样从 `config.yaml` 中获取 `admin_key` 并存入环境变量:
|
||||
|
||||
```bash
|
||||
admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell
|
||||
$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
|
||||
{
|
||||
"methods": ["GET"],
|
||||
"upstream": {
|
||||
"nodes": {
|
||||
"127.0.0.1:1": 1
|
||||
},
|
||||
"type": "roundrobin"
|
||||
},
|
||||
"uri": "/hello"
|
||||
}'
|
||||
```
|
||||
|
||||
测试:
|
||||
|
||||
```shell
|
||||
$ 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`
|
||||
|
||||
```shell
|
||||
$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
|
||||
{
|
||||
"plugins": {
|
||||
"fault-injection": {
|
||||
"abort": {
|
||||
"http_status": 500,
|
||||
"body": "Fault Injection!\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"uri": "/hello"
|
||||
}'
|
||||
```
|
||||
|
||||
测试:
|
||||
|
||||
```shell
|
||||
$ 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` 具有多节点,并且所有节点不可用
|
||||
|
||||
```shell
|
||||
$ curl http://127.0.0.1:9180/apisix/admin/upstreams/1 -H "X-API-KEY: $admin_key" -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"
|
||||
}'
|
||||
```
|
||||
|
||||
```shell
|
||||
$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
|
||||
{
|
||||
"uri": "/hello",
|
||||
"upstream_id": "1"
|
||||
}'
|
||||
```
|
||||
|
||||
测试:
|
||||
|
||||
```shell
|
||||
$ 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` 的响应头。
|
Reference in New Issue
Block a user