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


一 、http协议配置

1、反向代理测试

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

也可以使用已经安装的openresty

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

②配置指向后端服务

ApiSix基础入门:协议解析-样例详解_第1张图片

 


ApiSix基础入门:协议解析-样例详解_第2张图片

 


ApiSix基础入门:协议解析-样例详解_第3张图片

 

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

③配置路由规则信息

ApiSix基础入门:协议解析-样例详解_第4张图片

 


ApiSix基础入门:协议解析-样例详解_第5张图片

 

④测试查看

ApiSix基础入门:协议解析-样例详解_第6张图片

 

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

 

负载均衡测试

这里简单测试一下负载均衡轮询的效果。故然另外安装一个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服务

systemctl start httpd

systemctl status httpd

④在upstream中添加后端节点

ApiSix基础入门:协议解析-样例详解_第7张图片

 


ApiSix基础入门:协议解析-样例详解_第8张图片

 

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

ApiSix基础入门:协议解析-样例详解_第9张图片

 


ApiSix基础入门:协议解析-样例详解_第10张图片

 

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

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

二.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

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

apisix:
  stream_proxy:                 # TCP/UDP proxy
    tcp:                        # TCP proxy address list
      - 9100
      - 13305
    udp:                        # UDP proxy address list
      - 9200
      - 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数据:

{
    "server_addr": "192.168.26.185",
    "server_port":13305,
    "upstream": {
        "nodes": {
            "192.168.26.150:3306": 1
        },
        "type": "roundrobin"
    }
}

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

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提交修改返回结果

{
    "node": {
        "value": {
            "server_port": 13305,
            "upstream": {
                "nodes": {
                    "192.168.26.112:3306": 1
                },
                "hash_on": "vars",
                "type": "roundrobin"
            },
            "server_addr": "192.168.26.185"
        },
        "createdIndex": 57,
        "key": "/apisix/stream_routes/00000000000000000053",
        "modifiedIndex": 57
    },
    "prevNode": {
        "value": "{\"server_port\":13305,\"upstream\":{\"hash_on\":\"vars\",\"nodes\":{\"192.168.26.112:3306\":1},\"type\":\"roundrobin\"},\"server_addr\":\"192.168.26.185\"}",
        "createdIndex": 53,
        "key": "/apisix/stream_routes/00000000000000000053",
        "modifiedIndex": 53
    },
    "action": "set"
}

5.测试连接成功

ApiSix基础入门:协议解析-样例详解_第11张图片

UDP同理

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

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

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

ApiSix基础入门:协议解析-样例详解_第12张图片

属性

  • 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 端口:

 stream_proxy:                 # TCP/UDP proxy
      tcp:                        # TCP proxy port list
        - 9100

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

curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "remote_addr": "127.0.0.1",
    "plugins": {
        "mqtt-proxy": {
            "protocol_name": "MQTT",
            "protocol_level": 4,
            "upstream": {
                "ip": "127.0.0.1",
                "port": 1980
            }
        }
    }
}'

 

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。
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "methods": ["POST", "GET"],
    "uri": "/helloworld.Greeter/SayHello",
    "service_protocol": "grpc",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "127.0.0.1:50051": 1
        }
    }
}'

五、其它协议

  • 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

你可能感兴趣的:(OpenResty)