个人主页类网站开发背景,响应式网站 768 320,网站建设技术总结,广州微网站建设价位文章目录 前言一、端口修改1. apisix 端口修改2. dashboard 端口修改3. 登录密码修改 二、常用插件介绍1. 常用转换插件1.1 proxy-rewrite插件1.1.1 属性字段1.1.2 配置示例 2. 常用认证插件2.1 key-auth插件2.1.1 消费者端字段2.1.2 路由端字段2.1.3 配置示例 2.2 basic-auth插… 文章目录 前言一、端口修改1. apisix 端口修改2. dashboard 端口修改3. 登录密码修改 二、常用插件介绍1. 常用转换插件1.1 proxy-rewrite插件1.1.1 属性字段1.1.2 配置示例 2. 常用认证插件2.1 key-auth插件2.1.1 消费者端字段2.1.2 路由端字段2.1.3 配置示例 2.2 basic-auth插件2.2.1 消费者端字段2.2.2 路由端字段2.2.3 配置示例 3. 常用安全插件3.1 consumer-restriction插件3.1.1 属性字段3.1.2 配置示例 三、消费者配置数据编辑器方式1. UI页面对应字段说明2. 配置示例 四、上游配置1. UI页面对应字段说明2. 配置示例3. 健康检查3.1 主动健康检查3.2 被动健康检查 五、路由配置1. UI页面对应字段说明2. 配置示例绑定上游方式 六、模拟异常情况1. 模拟节点不健康1.1 上游配置1.2 路由配置如下1.3 测试结果1.4 日志查看1.5 结果分析 总结 前言
本文介绍了在 API 网关中进行端口修改、常用插件配置、消费者配置、上游配置和路由配置的方法。通过对这些方面的详细说明读者可以了解如何灵活地调整和定制自己的 API 网关环境以满足不同场景下的需求。 一、端口修改
1. apisix 端口修改
添加多个代理监听端口修改/usr/local/apisix/conf/config.yaml配置文件添加如下配置添加的配置将覆盖默认配置文件。 apisix:node_listen:- 9080- 9081- 90822. dashboard 端口修改
修改/usr/local/apisix/conf/conf.yaml配置文件修改如下配置。
conf:listen:port: 90003. 登录密码修改
可修改/usr/local/apisix/conf/conf.yaml配置文件中的用户认证配置。
authentication:users:- username: adminpassword: admin- username: userpassword: user二、常用插件介绍
使用插件需要配置 plugins 字段不配置默认不使用插件。启用插件需要把 plugins 字段下 _meta.disable 的值设为 false。
1. 常用转换插件
1.1 proxy-rewrite插件
proxy-rewrite 是处理上游代理信息重写的插件支持对 scheme、uri、host 等信息进行重写。
1.1.1 属性字段
名称类型是否必填默认值有效值描述uristring否转发到上游的新 uri 地址methodstring否GET, POST, PUT, HEAD, DELETE, OPTIONS,MKCOL, COPY, MOVE, PROPFIND, PROPFIND,LOCK, UNLOCK, PATCH, TRACE将路由的请求方法代理为该请求方法regex_uriarray[string]否使用正则表达式匹配来自客户端的 uri如果匹配成功则使用模板替换转发到上游的 uri如果没有匹配成功则将客户端请求的 uri 转发至上游。当同时配置 uri 和 regex_uri 属性时优先使用 uri。当前支持多组正则表达式进行模式匹配插件将逐一尝试匹配直至成功或全部失败。例如[“^/iresty/(.*)/(.*)/(.*)”, “/$1-$2-$3”, ^/theothers/(.*)/(.*), “/theothers/$1-$2”]奇数索引的元素代表匹配来自客户端请求的 uri 正则表达式偶数索引的元素代表匹配成功后转发到上游的 uri 模板。请注意该值的长度必须为偶数值。hoststring否转发到上游的新主机地址headersobject否转发到上游的新 uri 地址headers.addobject否添加新的请求头如果请求头已存在则追加到末尾。格式为 {“name”: “value”, …}headers.setobject否改写请求头如果请求头不存在则会添加。格式为 {“name”: “value”, …}headers.removearray否移除请求头。格式为 [“name”, …]use_real_request_uri_unsafeboolean否false使用 real_request_uringinx 中的原始 $request_uri绕过 URI 规范化。启用它被认为是不安全的因为它会绕过所有 URI 规范化步骤。
1.1.2 配置示例
...
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1...
...2. 常用认证插件
2.1 key-auth插件
key-auth插件是一种用于向路由或服务添加身份验证密钥的工具它需要与消费者配合使用。通过将密钥添加到请求参数或请求头中消费者可以验证其请求。
2.1.1 消费者端字段
名称类型是否必填描述keystring是key 是唯一的不同的消费者应设置不同的 key。如果多个消费者使用了相同的 key将会出现请求匹配异常。
2.1.2 路由端字段
名称类型是否必填默认值描述headerstring否apikey设置从哪个请求头获取 keyquerystring否apikey设置从哪个请求请求参数获取 keyheaderboolean否false当设置为 false 时将含有认证信息的请求头或请求参数传递给上游。如果为 true 时将删除对应的请求头或请求参数具体删除哪一个取决于是从请求头获取 key 还是从请求参数获取 key。
2.1.3 配置示例
消费者端
username: consumer_demo
desc: consumer_demo描述
plugins:key-auth:_meta:disable: falsekey: auth-one...路由端
...
plugins:key-auth:_meta:disable: falseheader: apikey...
...2.2 basic-auth插件
basic-auth插件是一种用于向路由或服务添加基本访问身份验证的工具。它需要与消费者配合使用。API的消费者可以将他们的密钥添加到请求头中以验证其请求。不同的消费设置该插件要设置不同的用户名如果不同消费者使用该插件设置的用户名相同可能会有异常。
2.2.1 消费者端字段
名称类型是否必填描述usernamestring是消费者的唯一用户名passwordstring是密码
2.2.2 路由端字段
名称类型是否必填默认值描述hide_credentialsboolean否false设置为 true 时不会将认证请求头传递给上游
2.2.3 配置示例
消费者端
username: consumer_demo
desc: consumer_demo描述
plugins:basic-auth:_meta:disable: falsepassword: userusername: user...路由端
...
plugins:basic-auth:_meta:disable: falsehide_credentials: false...
...3. 常用安全插件
3.1 consumer-restriction插件
consumer-restriction 插件允许用户根据路由、服务或消费者来设置相应的访问限制。
3.1.1 属性字段
名称类型是否必填默认值有效值描述typestring否consumer_nameconsumer_name, consumer_group_id, service_id, route_id支持设置访问限制的对象类型。consumer_name把 Consumer 的 username 列入白名单或黑名单来限制 Consumer 对 Route 或 Service 的访问。consumer_group_id: 把 Consumer Group 的 id 列入白名单或黑名单来限制 Consumer 对 Route 或 Service 的访问。service_id把 Service 的 id 列入白名单或黑名单来限制 Consumer 对 Service 的访问需要结合授权插件一起使用。route_id把 Route 的 id 列入白名单或黑名单来限制 Consumer 对 Route 的访问。whitelistarray[string]是加入白名单的对象优先级高于 allowed_by_methodsblacklistarray[string]是加入黑名单的对象优先级高于 whitelistrejected_codeinteger否403[200,…]当请求被拒绝时返回的 HTTP 状态码rejected_msgstring否当请求被拒绝时返回的错误信息allowed_by_methodsarray[object]否一组为消费者设置允许的配置包括用户名和允许的 HTTP 方法列表allowed_by_methods.user否为消费者设置的用户名allowed_by_methods.methodsarray[string]否GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT, TRACE, PURGE允许的 HTTP 方法列表
3.1.2 配置示例
...
plugins:consumer-restriction:_meta:disable: falseallowed_by_methods:- methods:- GETuser: postmanget- methods:- GETuser: consumer_demoblacklist:- consumer_demo2- consumer_demo3rejected_code: 403rejected_msg: 请求被拒绝type: consumer_namewhitelist:- postmanget- consumer_demo- consumer_demo1- consumer_demo2- consumer_demo3...
...三、消费者配置数据编辑器方式
消费者是路由的消费方形式包括开发者、最终用户、API 调用等。 它具有最高优先级Consumer Route Plugin Config Service。
1. UI页面对应字段说明
UI页面字段名数据编辑器字段是否必填名称username是描述desc否插件plugins否
2. 配置示例
创建消费者consumer_demo配置并启用basic-auth插件。
username: consumer_demo
desc: consumer_demo描述
plugins:basic-auth:_meta:disable: falsepassword: userusername: userkey-auth:_meta:disable: truekey: auth-one四、上游配置
在 API 网关中“上游”Upstream是指向后端服务的请求转发目标。API Gateway 通过将客户端请求代理到上游服务器来处理和响应这些请求。
1. UI页面对应字段说明
UI页面字段名数据编辑器字段是否必填默认值说明名称name是上游的名称描述desc否上游的描述负载均衡算法type是roundrobin默认为带权轮询主机名nodes.host是目标节点的主机名端口nodes.port是目标节点的端口权重nodes.weight是目标节点的权重Host 请求头pass_host是passpass保持与客户端请求一致的主机名node使用目标节点列表中的主机名或IP重试次数retries否可用后端节点的数量重试机制将请求发到下一个上游节点。值为 0 表示禁用重试机制留空表示使用可用后端节点的数量。重试超时时间retry_timeout否之前的请求和重试请求花费太多时间就不再继续重试限制是否继续重试的时间若之前的请求和重试请求花费太多时间就不再继续重试。0 代表不启用重试超时机制。协议scheme是HTTP连接超时timeout.connect是6建立从请求到上游服务器的连接的超时时间发送超时timeout.send是6发送数据到上游服务器的超时时间接受超时timeout.read是6从上游服务器接收数据的超时时间连接池容量keepalive_pool.size否320为 upstream 对象设置独立的连接池容量连接池空闲超时时间keepalive_pool.idle_timeout否60为 upstream 对象设置独立的连接池空闲超时时间连接池请求数量keepalive_pool.requests否1000为 upstream 对象设置独立的连接池请求数量
2. 配置示例
name: postman
desc: postman描述
type: roundrobin
nodes:- host: postman-echo.comport: 80weight: 1- host: postman-echo1.comport: 80weight: 1- host: postman-echo2.comport: 80weight: 1
pass_host: pass
retries: 3
retry_timeout: 6
scheme: http
timeout:connect: 6send: 6read: 6
keepalive_pool:idle_timeout: 60requests: 1000size: 3203. 健康检查 只有在 upstream 被请求时才会开始健康检查如果 upstream 被配置但没有被请求不会触发启动健康检查。如果没有健康的节点那么请求会继续发送给上游。如果 upstream 中只有一个节点时不会触发启动健康检查该唯一节点无论是否健康请求都将转发给上游。 3.1 主动健康检查
主动健康检查指 APISIX 通过预设的探针类型HTTP、HTTPS、TCP主动探测上游节点的存活性。
当发向健康节点 A 的 N 个连续探针都失败时该节点将被标记为不健康不健康的节点将会被 APISIX 的负载均衡器忽略无法收到请求若某个不健康的节点连续 M 个探针都成功时该节点将被重新标记为健康进而可以被代理。
3.2 被动健康检查
被动健康检查指通过判断从 APISIX 转发到上游节点的请求响应状态来判断对应的上游节点是否健康。相对于主动健康检查被动健康检查的方式无需发起额外的探针但是也无法提前感知节点状态可能会有一定量的失败请求。
若发向健康节点 A 的 N 个连续请求都被判定为失败则该节点将被标记为不健康。 由于不健康的节点无法收到请求仅使用被动健康检查无法重新将节点标记为健康因此需要结合主动健康检查来使用。 五、路由配置
路由根据定义的规则匹配客户端的请求加载并执行相应的插件并将请求转发给指定的上游。
1. UI页面对应字段说明
UI页面字段名数据编辑器字段是否必填默认值说明名称name是路由名称唯一的最大长度为100标签labels否为路由增加自定义标签可用于路由分组。标签labels.tag_name否tag_name是自定义的标签名标签名和标签值都要自定义例如tag_demo: postman_tag描述desc否路由的描述发布status是1设置路由状态是否启用1表示启用0表示禁用匹配条件.路径uris是/*匹配 uri 的路径可设置多个匹配路径匹配条件.HTTP方法methods否不填默认所有方法在UI页面需要选择 ALL匹配条件.优先级priority否0设置匹配条件的优先级选择上游服务upstream_id是需要绑定的上游服务的 IDUI页面选择后会自动绑定上游对应的 ID
2. 配置示例绑定上游方式
name: route_demo
labels:API_VERSION: v1tag_demo: postman_tag
desc: route_demo描述
status: 1
uris:- /postman/*- /postmanget/*
methods:- GET
priority: 1
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1
upstream_id: 506489652354484505六、模拟异常情况
apisix主机为 192.168.145.103。使用公共接口 https://postman-echo.com/get?foo1bar1foo2bar2 进行测试该接口的返回数据如下
1. 模拟节点不健康
这里准备了6个节点分别为 postman-echo.com、postman-echo.com1、postman-echo.com2、postman-echo.com3、postman-echo.com4、postman-echo.com5其中 postman-echo.com 节点是健康的其他节点是不健康的。
1.1 上游配置
nodes:- host: postman-echo.comport: 80weight: 1- host: postman-echo1.comport: 80weight: 1- host: postman-echo2.comport: 80weight: 1- host: postman-echo3.comport: 80weight: 1- host: postman-echo4.comport: 80weight: 1- host: postman-echo5.comport: 80weight: 1
retries: 3
timeout:connect: 6send: 6read: 6
type: roundrobin
scheme: http
pass_host: pass
name: postman
desc: postman描述
keepalive_pool:idle_timeout: 60requests: 1000size: 320
retry_timeout: 61.2 路由配置如下
uris:- /postman/*- /postmanget/*
name: route_demo
desc: route_demo描述
priority: 1
methods:- GET
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1
upstream_id: 506489652354484505
labels:API_VERSION: v1route: rpute_demo
status: 11.3 测试结果
成功获取到数据但是响应时间比较长相对于前面1s的响应时间这里用了1.70min。
1.4 日志查看
查看/usr/local/apisix/logs/error.log文件可以看到如下报错。 查看/usr/local/apisix/logs/access.log文件可以看到成功的一条记录。
1.5 结果分析
当有其他节点不健康时响应速度会变慢。当所有节点不健康时无法获取响应数据。 总结
本文从多个方面介绍了在 API 网关中进行各种配置操作的方法。无论是修改端口还是添加插件或设置消费者等都能够帮助用户更好地管理和控制其API网关环境。通过理解并熟悉这些操作步骤读者可以根据自身需求来优化和定制他们所使用的API网关系统并提供更高效可靠且安全性强大的服务。
希望本教程对您有所帮助如有任何疑问或问题请随时在评论区留言。感谢阅读