ApacheAPISix
refer
https://apisix.apache.org/zh/docs/apisix/installation-guide/
Install
https://apisix.apache.org/zh/docs/apisix/installation-guide/
安装 etcd
APISIX 使用 etcd 作为配置中心进行保存和同步配置。在安装 APISIX 之前,需要在你的主机上安装 etcd。
如果你在安装 APISIX 时选择了 Docker 或 Helm 安装,那么 etcd 将会自动安装;如果你选择其他方法或者需要手动安装 APISIX,请参考以下步骤安装 etcd:
ETCD_VERSION='3.5.19'
wget https://github.com/etcd-io/etcd/releases/download/v3.5.19/etcd-v3.5.19-linux-amd64.tar.gz
tar -xvf etcd-v3.5.19-linux-amd64.tar.gz
cd etcd-v3.5.19-linux-amd64
cp -a etcd etcdctl /usr/bin/
nohup etcd >/tmp/etcd.log 2>&1 &
通过 DEB 仓库安装
# 这个gnupg是给apt-key软件使用的
apt install gnupg && apt install gnupg1
# 安装 DEB 仓库
wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list
# 安装 APISIX
apt update
apt install -y apisix=3.12.0-0
管理 APISIX 服务
修改 the maximum number of open file descriptors,默认是1024,为了提高性能,设置为65535
vim /etc/security/limits.conf
# 针对所有用户(或替换 * 为具体用户名),* wildcard doesn't work for root,所以root用户需要单独配置
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
- 生效方式:
- 重启系统 或 重新登录用户会话(退出终端再登录)。
- 验证:
ulimit -n
应显示新值(如 65535)。
APISIX 安装完成后,你可以运行以下命令初始化 NGINX 配置文件和 etcd:
sudo apisix init
通过修改本地 ./conf/config.yaml
文件,或者在启动 APISIX 时使用 -c
或 --config
添加文件路径参数 apisix start -c <path string>
,完成对 APISIX 服务本身的基本配置。默认配置不应修改,可以在 apisix/cli/config.lua
中找到。
默认配置文件存在于:/usr/local/apisix/apisix/cli/config.lua
可以修改: /usr/local/apisix/conf/config.yaml
更新 Admin API key
建议修改 Admin API 的 key,保护 APISIX 的安全。
请参考如下信息更新配置文件:
./conf/config.yaml
deployment:
admin:
admin_key:
- name: "admin"
key: newsupersecurekey # 请修改 key 的值
role: admin
更新完成后,你可以使用新的 key 访问 Admin API:
curl http://127.0.0.1:9180/apisix/admin/routes?api_key=newsupersecurekey -i
启动 & 停止
使用以下命令启动 APISIX:
sudo apisix start
如果需要停止 APISIX,你可以使用 apisix quit
或者 apisix stop
命令。
apisix quit
将正常关闭 APISIX,该指令确保在停止之前完成所有收到的请求。
apisix quit
apisix stop
命令会强制关闭 APISIX 并丢弃所有请求。
apisix stop
相关端口
以下是 APISIX 相关的核心端口及其用途的详细说明:
1. 数据平面(Data Plane)端口
处理客户端请求的入口和出口流量,是 API 网关的核心端口。
-
默认端口:
- 9080:HTTP 协议默认监听端口(处理 HTTP 请求)。
- 9443:HTTPS 协议默认监听端口(处理加密的 HTTPS 请求)。
用途:
接收来自客户端的 API 请求,并通过路由、插件等机制转发到上游服务。
2. 管理 API(Admin API)端口
用于配置 APISIX 的接口(如路由、服务、插件等)。
-
默认端口:
- 9180:HTTP 管理接口(非加密)。
- 9443:HTTPS 管理接口(加密,需配置证书)。
用途:
通过 RESTful API 动态管理 APISIX 的配置(例如添加路由、启用插件)。
安全建议:- 默认 Admin API 的 key 为
edd1c9f034335f136f87ad84b625c8f1
,必须修改(参考config.yaml
中的admin_key
)。 - 生产环境建议仅允许内网访问或通过防火墙限制来源 IP。
3. etcd 端口
APISIX 使用 etcd 作为配置中心存储动态配置。
-
默认端口:
- 2379:etcd 客户端通信端口(APISIX 读写配置)。
- 2380:etcd 节点间通信端口(集群模式下使用)。
用途:
APISIX 从 etcd 获取路由、插件等配置信息。
注意:
如果 etcd 与 APISIX 不在同一主机,需确保网络互通且端口开放。
4. 插件相关端口
部分插件可能需要额外端口:
- Prometheus 插件:
- 9091:默认暴露 Prometheus 指标的端口(通过
/apisix/prometheus/metrics
获取)。
- 9091:默认暴露 Prometheus 指标的端口(通过
- gRPC 转发:
- 9081:gRPC 协议监听端口(需在路由中配置
protocols: ["grpc"]
)。
- 9081:gRPC 协议监听端口(需在路由中配置
- TCP/UDP 流代理:
- 自定义端口:如通过
stream-proxy
插件代理 TCP/UDP 流量时,需配置额外端口。
- 自定义端口:如通过
ufw allow 9080
ufw status numbered
5. Dashboard(可选)
APISIX Dashboard 是独立的管理界面,默认端口:
- 9000:HTTP 访问端口。
- 9443:HTTPS 访问端口。
用途:
通过 Web 界面管理 APISIX 配置(需单独安装)。
端口配置修改
所有端口均可在 config.yaml
中自定义:
apisix:
node_listen: 8000 # 修改数据平面 HTTP 端口
ssl_listen: 8443 # 修改数据平面 HTTPS 端口
deployment:
admin:
admin_listen: 9180 # 修改 Admin API 端口
安全建议
- 最小化暴露端口:
- 数据平面端口(如 9080/9443)对外开放。
- Admin API(9180)和 etcd(2379)仅限内网访问。
- 启用 HTTPS:
为 Admin API 和数据平面配置 TLS 证书,避免敏感信息明文传输。 - 防火墙规则:
使用iptables
或云平台安全组限制来源 IP。
检查端口占用
# 查看 APISIX 监听的端口
netstat -tulnp | grep nginx
# 检查 etcd 端口
netstat -tulnp | grep etcd
总结
端口 | 协议 | 用途 | 安全等级 |
---|---|---|---|
9080 | HTTP | 客户端请求入口 | 对外开放 |
9443 | HTTPS | 加密客户端请求入口 | 对外开放 |
9180 | HTTP | Admin API 配置管理 | 内网隔离 |
2379 | HTTP | etcd 配置中心通信 | 内网隔离 |
9091 | HTTP | Prometheus 指标暴露 | 按需开放监控系统 |
根据实际需求调整端口和安全策略,确保 APISIX 高效安全运行。
Admin API
https://apisix.apache.org/zh/docs/apisix/admin-api/
consumer & route
apisix 请求是先由consumer处理,还是先由route处理?
在 Apache APISIX 的请求处理流程中,请求会先经过 Route(路由)匹配,再进入 Consumer(消费者)认证环节。以下是具体流程解析:
🔄 请求处理核心流程
- 路由匹配(Route Matching)优先
- 当请求到达 APISIX 时,网关首先根据请求的 URI、Host、请求头、Cookie 等特征匹配预先定义的 Route 规则。
- 若匹配成功,则进入该 Route 绑定的插件执行阶段;若失败,直接返回
404
或自定义错误。
- 插件执行阶段触发 Consumer 认证
- 在路由匹配成功后,APISIX 会按顺序执行该 Route 绑定的插件(如限流、认证等)。
- 认证类插件(如
key-auth
、jwt-auth
)在此阶段运行:- 插件从请求中提取凭证(如 API Key、JWT Token);
- 通过凭证匹配对应的 Consumer(消费者),例如通过 API Key 找到绑定的用户身份。
- 若未配置认证插件或未携带凭证,且 Route 启用了匿名 Consumer(
anonymous
),请求会被分配至匿名用户。
- Consumer 身份生效后的操作
- 匹配到 Consumer 后,APISIX 会加载该 Consumer 专属的插件配置(如限流规则、上游服务覆盖),并覆盖 Route 或 Service 的同名插件配置(因 Consumer 优先级最高)。
- 最终请求被转发至指定的上游服务(Upstream)。
⚠️ 关键逻辑说明
- 执行顺序不可逆:
必须先匹配 Route,才能执行后续插件(包括 Consumer 认证)。未匹配 Route 的请求不会触发任何 Consumer 逻辑。 - 插件配置优先级:
Consumer > Route > Plugin Config > Service
。即使 Route 和 Consumer 都配置了同一插件,最终生效的是 Consumer 的配置。 - 匿名 Consumer 的兜底作用:
若请求未通过认证且配置了匿名 Consumer,网关会将其视为匿名用户处理,否则返回401/403
。
简言之:Route 是流量的“入口关卡”,Consumer 是身份“识别器”。两者协同实现动态路由与用户级策略管控。
consumer存在的意义
当不同的人,对同一个uri地址发起请求时,可以通过consumer来判断,当前请求是来自于哪个用户,从而实现,针对某个用户,做限流操作 或者 黑名单操作
示例
创建routes,支持认证
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H "X-API-KEY: weipengadmin" -X PUT -i -d '{
"name": "WaterkbDevRoute",
"uri": "/v1/chat/completions",
"plugins": {
"key-auth": {
"header": "Authorization",
"hide_credentials": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"218.94.128.34:18102": 1
}
}
}'
创建consumer,并支持认证
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H "X-API-KEY: weipengadmin" -X PUT -i -d '
{
"username": "WaterkbDevConsumer",
"plugins": {
"key-auth": {
"key": "Bearer waterkb-dev-202505"
}
}
}'
进行验证
curl --http1.1 http://127.0.0.1:9080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer waterkb-dev-202505" \
-d '{
"model": "deepseek-ai",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"stream": false
}'
如果不加Authorization以及对应的bear值,就会出现401 unanthorized提示。
查看routes列表:
curl http://127.0.0.1:9180/apisix/admin/routes \
-H "X-API-KEY: weipengadmin" -X GET
创建其他的routes和 consumer
route:
curl http://127.0.0.1:9180/apisix/admin/routes/2 \
-H "X-API-KEY: long123456@Apisix" -X PUT -i -d '{
"name": "WaterkbDevEmbeddingRoute",
"uri": "/v1/embeddings",
"plugins": {
"key-auth": {
"header": "Authorization",
"hide_credentials": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"192.168.10.168:8103": 1
}
}
}'
consumer:
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H "X-API-KEY: long123456@Apisix" -X PUT -i -d '
{
"username": "WaterkbDevEmbeddingConsumer",
"plugins": {
"key-auth": {
"key": "Bearer waterkb-dev-embedding-202505"
}
}
}'
验证:
curl --http1.1 http://127.0.0.1:9080/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer waterkb-dev-embedding-202505" \
-d '{
"model": "conan-embedding-v1",
"input": "今天星期几"
}'
Stream Proxy & Stream Route
文章作者:Administrator
文章链接:http://localhost:8090//archives/apacheapisix
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!
评论