在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

47从零开始用Rust编写nginx,配对还有这么多要求!负载均衡中的路径匹配

请分析下,47从零开始用Rust编写nginx,配对还有这么多要求!负载均衡中的路径匹配
最新回答
跌跌撞撞找不到方向

2024-09-14 13:35:53

wmproxy已实现包括http/https代理、socks5代理、反向代理、负载均衡、静态文件服务器、websocket代理、四层TCP/UDP转发、内网穿透等功能,并将实现过程分享出来,有兴趣的可以一起参与项目。


项目地址:国内 -

https://gitee.com/tickbh/wmproxy
; Github -
https://github.com/tickbh/wmproxy


设计目标集中在负载均衡匹配规则上,以匹配正确的location进行相应操作。


初始设计方案仅支持前缀匹配,配置如 /wmproxy/xx,则访问 /wmproxy/xx 会被分配至该location,此方案简单,但复杂需求无法满足。


设计方案需求包括前缀匹配外的其他多种需求匹配,如正则匹配、中间匹配、后缀匹配等。通过引入Matcher类,初始化时处理字符串或映射格式,简化配置。


Matcher初始化后,通过判断传入数据是否正确匹配实现路径处理。主要复杂点在于路径匹配,包括正则匹配、前缀匹配、中间匹配和后缀匹配。通过分割字符串处理,数组第一个元素进行前缀匹配,最后一个元素进行后缀匹配。若无'*'字符,数组长度为1,符合前缀匹配。


匹配函数在Matcher中实现,引用src资源,无需创建内存对象,直接利用正则匹配进行路径匹配。


匹配规则在复杂匹配中至关重要,能轻松将请求分配至合适位置。本文重点介绍正则匹配及带*的路径匹配。