当前位置:   article > 正文

ApiSix基础入门:协议解析-样例详解_api协议举例

api协议举例


一 、http协议配置

1、反向代理测试

①启动一个正常的web服务器

也可以使用已经安装的openresty

  1. #启动web服务器 默认80端口
  2. /usr/local/openresty/bin/opennresty
  3. #检测服务是否开启 80端口
  4. netstat -lntp |grep 80

②配置指向后端服务

API服务网关实现之APISIX安装和部署

 


API服务网关实现之APISIX安装和部署

 


API服务网关实现之APISIX安装和部署

 

到这里还暂时不能使用。需要配置具体路由信息进行转发测试

③配置路由规则信息

API服务网关实现之APISIX安装和部署

 


API服务网关实现之APISIX安装和部署

 

④测试查看

API服务网关实现之APISIX安装和部署

 

通过上图,可以查看到已经转发成功。也就是说明反向代理设置成功。

 

负载均衡测试

这里简单测试一下负载均衡轮询的效果。故然另外安装一个httpd监听不同端口进行测试。

①安装一个httpd

yum install httpd

②修改httpd默认端口,添加测试页面

默认httpd监听端口80,上面案例中已经启动openresty在80端口,故这里将httpd修改为8080。

vim +42 /etc/httpd/conf/httpd.conf

API服务网关实现之APISIX安装和部署

 

添加测试页面

echo this is httpd page >> /var/www/html/index.html

③启动并查看httpd服务

  1. systemctl start httpd
  2. systemctl status httpd

④在upstream中添加后端节点

API服务网关实现之APISIX安装和部署

 


API服务网关实现之APISIX安装和部署

 

⑤测试查看负载均衡转发效果

API服务网关实现之APISIX安装和部署

 


API服务网关实现之APISIX安装和部署

 

以上案例可以看到路由已经转发,并且负载均衡到这里实现的两个节点。

该样例转发(需要继续完善)

二.UDP/TCP协议配置

Stream 代理

TCP 作为通信协议:LDAP、 MYSQL 和 RTMP

UDP协议:非事务性的应用如 DNS、 syslog 和 RADIUS 

UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:53(DNS)、69(TFTP)、161(SNMP),

使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP。

1. 开启端口,APISIX配置:conf/config.yaml

  注意这里需要提前添加监听的接口(非全动态,需要完善)

  1. apisix:
  2. stream_proxy: # TCP/UDP proxy
  3. tcp: # TCP proxy address list
  4. - 9100
  5. - 13305
  6. udp: # UDP proxy address list
  7. - 9200
  8. - 127.0.0.1:9211

2.新增路由

请求方式: put修改; post新增

head添加key: X-API-KEY:edd1c9f034335f136f87ad84b625c8f1

修改指定id的路由:http://192.168.26.185:9080/apisix/admin/stream_routes/1

 

新增访问路径:http://192.168.26.185:9080/apisix/admin/stream_routes

提交的json数据:

  1. {
  2. "server_addr": "192.168.26.185",
  3. "server_port":13305,
  4. "upstream": {
  5. "nodes": {
  6. "192.168.26.150:3306": 1
  7. },
  8. "type": "roundrobin"
  9. }
  10. }

注:新增同样的路由,并不会覆盖,而是新增一条,生效的是第一次新增的路由 [ 理应提示新增失败,或是覆盖比较好些]

3.新增返回结果:

{"node":{"value":{"server_port":13305,"upstream":{"nodes":{"192.168.26.150:3306":1},"hash_on":"vars","type":"roundrobin"},"server_addr":"192.168.26.185"},"createdIndex":45,"key":"\/apisix\/stream_routes\/00000000000000000045","modifiedIndex":45},"action":"create"}

4.修改返回结果

http://192.168.26.185:9080/apisix/admin/stream_routes/00000000000000000053

put提交修改返回结果

  1. {
  2. "node": {
  3. "value": {
  4. "server_port": 13305,
  5. "upstream": {
  6. "nodes": {
  7. "192.168.26.112:3306": 1
  8. },
  9. "hash_on": "vars",
  10. "type": "roundrobin"
  11. },
  12. "server_addr": "192.168.26.185"
  13. },
  14. "createdIndex": 57,
  15. "key": "/apisix/stream_routes/00000000000000000053",
  16. "modifiedIndex": 57
  17. },
  18. "prevNode": {
  19. "value": "{\"server_port\":13305,\"upstream\":{\"hash_on\":\"vars\",\"nodes\":{\"192.168.26.112:3306\":1},\"type\":\"roundrobin\"},\"server_addr\":\"192.168.26.185\"}",
  20. "createdIndex": 53,
  21. "key": "/apisix/stream_routes/00000000000000000053",
  22. "modifiedIndex": 53
  23. },
  24. "action": "set"
  25. }

5.测试连接成功

UDP同理

三.动态MQTT代理(待测试)

支持用 client_id 对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 5.0 两个协议标准

MQTT(Message Queue Telemetry Transport 消息队列遥测传输):

属性

  • protocol_name: 必选,协议名称,正常情况下应为“ MQTT” 。
  • protocol_level: 必选,协议级别,MQTT 3.1.* 应为 “4” ,MQTT 5.0 应该是“5”。
  • upstream.ip: 必选,将当前请求转发到的上游的 IP 地址,
  • upstream.port: 必选,将当前请求转发到的上游的 端口,

1.conf/config.yaml 中首先开启 stream_proxy 配置,比如下面配置代表监听 9100 TCP 端口:

  1. stream_proxy: # TCP/UDP proxy
  2. tcp: # TCP proxy port list
  3. - 9100

2.指定的 route 上开启了 mqtt-proxy 插件:

  1. curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "remote_addr": "127.0.0.1",
  4. "plugins": {
  5. "mqtt-proxy": {
  6. "protocol_name": "MQTT",
  7. "protocol_level": 4,
  8. "upstream": {
  9. "ip": "127.0.0.1",
  10. "port": 1980
  11. }
  12. }
  13. }
  14. }'

 

3 .禁用插件

当你想去掉插件的时候,很简单,在插件的配置中把对应的 json 配置删除即可,无须重启服务,即刻生效:

$ curl http://127.0.0.1:2379/v2/keys/apisix/stream_routes/1 -X DELETE

现在就已经移除了 mqtt-proxy 插件了。

四. grpc 代理(待测试)

创建代理 gRPC 的 Route

在指定 Route 中,代理 gRPC 服务接口:

  • 注意: 这个 Route 的属性 service_protocol 必须设置为 grpc
  • 注意: APISIX 使用 TLS 加密的 HTTP/2 暴露 gRPC 服务, 所以需要先 配置 SSL 证书(配置证书);
  • 下面例子所代理的 gRPC 服务可供参考:grpc_server_example
  1. curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "methods": ["POST", "GET"],
  4. "uri": "/helloworld.Greeter/SayHello",
  5. "service_protocol": "grpc",
  6. "upstream": {
  7. "type": "roundrobin",
  8. "nodes": {
  9. "127.0.0.1:50051": 1
  10. }
  11. }
  12. }'

五、其它协议

  • gRPC 协议转换:支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。【插件grpc-transcode】
  • Websocket 代理
  • Proxy Protocol
  • Dubbo 代理:基于 Tengine,可以实现 Dubbo 请求的代理。
  • HTTP(S) 反向代理
  • SSL:动态加载 SSL 证书

六、插件集成

LuaJIT - 极速版Lua实现 :
ArrayVarNginxModule - 数组类型的Nginx变量 
AuthRequestNginxModule - 鉴权,想象一下以C代码的速度判断一个请求是否合法,是不是很有快感呢?! 
DrizzleNginxModule - Nginx-MySQL桥,非阻塞的哦,我又爱又恨的一个模块,值得注意的是,其响应是RDS流 
EchoNginxModule - 以非常直观的方式在Nginx配置文件中编写简单的处理逻辑,源码包含大量注释,绝对是入门好例子!!?? 
EncryptedSessionNginxModule - 加密会话 
FormInputNginxModule - 解析post请求中的参数,这下子,简单请求根本不需要PHP/Java来处理啦 
HeadersMoreNginxModule - Nginx默认的header模块只能添加或忽略,这个给你CRUD全套的!! 
IconvNginxModule - 编码转换,不多说,也不懂 
StandardLuaInterpreter - 与Lua官方实现所匹配,一般用不上,因为我们用LuaJIT!! 
MemcNginxModule - 与Memcached的绝配,谁用谁知道!!与upstram_keepalive一起用,你能更High!! 

Nginx :
NginxDevelKit - N多第三方插件都依赖的东西,不知道为啥 提供一些方便使用的基础API封装 
LuaCjsonLibrary - Lua版的Json处理库实在太慢,这个才叫速度!! 
LuaNginxModule - 我的最爱,一般逻辑,完全没必要用Java/PHP啦 
LuaRdsParserLibrary - 在Lua中直接处理RDS流,速度杠杠的! 
LuaRedisParserLibrary - 在Lua中处理Redia模块的响应,暂时我还没用上 
PostgresNginxModule - Nginx-Postgres桥,输出的也是RDS流 
RdsCsvNginxModule - RDS流转CVS格式,不知道能干啥,报表? 
RdsJsonNginxModule - RDS流转JSON字符串,之前经常用这个 
Redis2NginxModule - Nginx-Redis2桥 
SetMiscNginxModule - 提供很多很实用的方法,例如base64编解码,URL编解码,SQL防注入等等 
SrcacheNginxModule - 缓存模块,据说跟Memc模块一起用比较爽 
UpstreamKeepaliveNginxModule - 与Memc模块的标配,号称性能提升几倍呢 
XssNginxModule - 防跨站攻击的 通过Jsonp进行跨站ajax编程 

使用参考文章https://zvv.me/amp/1374.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/985920
推荐阅读
  

闽ICP备14008679号