Reproxy:边缘服务器&反向代理工具

  • A+
所属分类:安全工具

关于Reproxy

Reproxy是一个简单且功能强大的边缘HTTP(S)服务器和反向代理工具,该工具支持多种提供程序,比如说Docker或文件等等。这些提供程序负责给工具提供有关请求服务器的基础信息、URL地址、目标URL和运行状况检查URL等数据,能够以单个二进制文件或Docker容器的形式进行分发。

功能介绍

  • 基于Let’s Encrypt的自动化SSL终止;

  • 支持用户提供的SSL证书;

  • 简单但灵活的代理规则;

  • 静态命令行代理规则提供程序;

  • 基于文件的动态代理规则提供程序;

  • 具有自动发现功能的Docker提供程序;

  • 支持多个(虚拟)主机;

  • 可选流量压缩;

  • 用户定义的限制和超时;

  • 单二进制文件发布;

  • Docker容器发布;

  • 内置静态资产服务器;

  • 具有路由信息的管理服务器;

工具安装

源码安装

广大研究人员可以访问该项目的Releases页面选择和获取对应版本的Reproxy。

Docker安装

Reproxy的Docker容器版本可以在Docker Hub上获取到,运行下列命令即可:

docker pull umputun/reproxy

docker pull ghcr.io/umputun/reproxy

提供程序

我们可以通过各种提供程序来给工具提供代理规则,当前支持文件、Docker和静态规则三种形式。每一个提供程序都可以为代理请求和静态(资产)定义多个路由规则,用户可以同时设置多个提供程序。

静态规则

这是最简单的提供程序,可以直接在命令行工具中定义所有需要映射的规则,而且还支持定义多个规则。其中,每个规则需要用3或4个逗号对元素进行分隔,元素包含服务器、源URL、目的地址和[ping-url]:

*,^/api/(.*),https://api.example.com/$1

example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping

文件规则

reproxy --file.enabled --file.name=config.yml

下面给出的是config.yml文件样例:

default: # the same as * (catch-all) server

  - { route: "^/api/svc1/(.*)", dest: "http://127.0.0.1:8080/blah1/$1" }

  - {

      route: "/api/svc3/xyz",

      dest: "http://127.0.0.3:8080/blah3/xyz",

      "ping": "http://127.0.0.3:8080/ping",

    }

srv.example.com:

  - { route: "^/api/svc2/(.*)", dest: "http://127.0.0.2:8080/blah2/$1/abc" }

这种属于动态提供程序,所有的文件修改都可以自动部署。

Docker规则

Docker提供程序支持完全的自动化发现,而且无需额外配置,支持修改的标签包含:

reproxy.server

reproxy.route

reproxy.dest

reproxy.port

reproxy.ping

reproxy.enabled

工具使用

SSL支持

SSL模式(默认)可以设置为auto、static或none。如果设置为auto,则会自动为所有发现的服务器发布SSL证书,用户可以通过设置--ssl.fqdn值来修改配置。

Ping和健康检测

Reproxy针对该功能提供了两个节点:

/ping:查看Reproxy的开启和运行情况;

/health:返回200 OK状态码,检查服务器健康状况;

管理API

这是一个可选项,能够使用“--mgmt.enabled”开启,此时会在mgmt.listen上暴露两个节点:

GET /routes:枚举所有发现的路由

GET /metrics:返回Prometheus metrics;

项目地址

Reproxy:https://github.com/umputun/reproxy


本文始发于微信公众号(盾山实验室):Reproxy:边缘服务器&反向代理工具

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: