概述
一 、http协议配置
1、反向代理测试
①启动一个正常的web服务器
也可以使用已经安装的openresty
#启动web服务器 默认80端口
/usr/local/openresty/bin/opennresty
#检测服务是否开启 80端口
netstat -lntp |grep 80
②配置指向后端服务
到这里还暂时不能使用。需要配置具体路由信息进行转发测试
③配置路由规则信息
④测试查看
通过上图,可以查看到已经转发成功。也就是说明反向代理设置成功。
负载均衡测试
这里简单测试一下负载均衡轮询的效果。故然另外安装一个httpd监听不同端口进行测试。
①安装一个httpd
yum install httpd
②修改httpd默认端口,添加测试页面
默认httpd监听端口80,上面案例中已经启动openresty在80端口,故这里将httpd修改为8080。
vim +42 /etc/httpd/conf/httpd.conf
添加测试页面
echo this is httpd page >> /var/www/html/index.html
③启动并查看httpd服务
systemctl start httpd
systemctl status httpd
④在upstream中添加后端节点
⑤测试查看负载均衡转发效果
以上案例可以看到路由已经转发,并且负载均衡到这里实现的两个节点。
该样例转发(需要继续完善)
二.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.测试连接成功
UDP同理
三.动态MQTT代理(待测试)
支持用 client_id
对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 5.0 两个协议标准
MQTT(Message Queue Telemetry Transport 消息队列遥测传输):
属性
protocol_name
: 必选,协议名称,正常情况下应为“ MQTT” 。protocol_level
: 必选,协议级别,MQTT3.1.*
应为 “4” ,MQTT5.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
最后
以上就是细腻天空为你收集整理的ApiSix基础入门:协议解析-样例详解的全部内容,希望文章能够帮你解决ApiSix基础入门:协议解析-样例详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复