APISIX流量网关使用介绍
一、概述
使用APISIX作为统一网关,官网地址为:https://apisix.apache.org
Apache APISIX 是一个动态、实时、高性能的 API 网关,基于 Nginx 网络库和 etcd 实现, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
Apache APISIX 的技术架构如下图所示:
当前使用的版本为:1.4-0,该版本的详细说明可见Github地址:https://github.com/apache/apisix/blob/v1.4.1/README_CN.md
APISIX的安装详见:https://github.com/ShemgXu/apisix_init
默认安装目录为:/usr/local/apisix,其中:
- /usr/local/apisix/logs 为日志文件路径,插件的日志输出在error.log文件中,请求日志输出在access.log文件中
- /usr/local/apisix/html 为APISIX映射的静态资源目录,可通过http//ip:9280/静态目录访问静态资源,例如/usr/local/apisix/html/test/index.html的访问地址为http//ip:9280/test/index.html
- /usr/local/apisix/conf为配置文件目录,可通过修改config.yaml来设置APISIX的配置,nginx.conf文件为启动时自动生成,故修改该文件无法使APISIX更改配置。
我在apisix-1.4.0上做了一些定制化开发和插件开发,目前用的比较多的是以下几个自定义插件,分别为:
插件名称 | 插件作用 |
---|---|
yhgw-enc | 用于接口统一报文校验、请求报文加解密和请求报文验签 |
yhgw-auth-v2 | 用于接口请求的鉴权和认证,校验Authorization Token的合法性以及权限 |
yhgw-auth | 用于实现应用的接口权限控 |
yhgw-skywalking | 实现apisix skywalking客户端,用于集成skywalking |
APISIX主要使用了以下这些端口:
端口 | 作用 |
---|---|
9080 | HTTP |
9180 | APISIX管理后台 |
9280 | 静态资源映射端口,静态资源映射目录默认为/usr/local/apisix/html,可在config/config.yaml中修改nginx_config.http.static_root_path值更改 |
9443 | HTTPS |
安装完APISIX后,我们可以在APISIX Dashboard控制台进行配置操作
默认地址为:http:ip:9180/apisix/dashboard,APISIX Dashboard默认限制IP访问,可在/usr/local/apisix/conf/config.yaml配置文件中,通过属性apisix.allow_admin添加或修改IP网段来访问。修改配置文件后,需要使用apisix restart命令重启生效。
以下为APISIX Dashboard几个重要模块介绍:
二、Upstream
apisix Upstream相当于Nginx upstream,支持roundrobin(加权轮询)和chash(一致性hash)两种方式。
三、SSL
SSL模块可为域名配置ssl证书,SNI填写配置域名,CERT填写.crt证书的值,KEY填写.key值,点击保存即可生效。
四、Routes
Routes模块可配置APISIX的路由转发规则,类似Nginx的http.server模块。
在APISIX中配置一个可用的路由规则,需要设置如下几个配置:
- URIs(相当于Nginx location配置)
- Upstream(相当于Nginx upstream配置,选择Upstream配置的选项)
- plugin(可选,用于对接口进行扩展处理,后端接口默认需要配置yhgw-enc、yhgw-auth-v2、proxy-rewrite三个插件)
五、Plugin
apisix较为常见的插件为:
插件名称 | 插件作用 |
---|---|
proxy-rewrite | 用于请求地址的重写,类似nginx rewrite,由于我们统一网关有路由规则规范,所以一般的项目规则都需要此插件进行请求地址的重写。 |
cors | 用于跨域配置,此插件使用后,由于重复设置跨域会导致跨域失效,前置Nginx和后端程序不能再设置跨域 |
yhgw-enc | 用于接口统一报文校验、请求报文加解密和请求报文验签 |
yhgw-auth-v2 | 用于接口请求的鉴权和认证,校验Authorization Token的合法性以及权限 |
yhgw-auth | 用于实现应用的接口权限控 |
yhgw-skywalking | 实现apisix skywalking客户端,用于集成skywalking |
其它插件 | 其它插件可自行在Github文档了解详情 |
剩余两个模块,Consumers和Services用的不多,感兴趣的小伙伴可以自行查看官方文档了解。
六、FAQ
-
后端项目中,有些接口是二进制文件流或者给第三方调用的,比如微信支付回调地址,无法提供统一报文格式,这类的接口怎么配置路由转发?
A:Routes规则中只配置单纯的转发,不配置yhgw-enc和yhgw-auth-v2插件,例如:
-
在Routes模块新增路由规则,添加proxy-rewrite插件时在regex_uri项点击添加值按钮无反应?
A:由于官方前端js存在bug,无法直接点击该按钮进行设置。可先在uri栏随便填值后点击确定,然后点击已设置的proxy-rewrite插件,即可看到regex_uri项已经可以输入。
其中,regex_uri[0]为想匹配的URL正则表达式,regex_uri[1]为重写的URL正则表达式