安全矩阵

 找回密码
 立即注册
搜索
查看: 2636|回复: 0

Reproxy:一款功能强大的边缘服务器&反向代理工具

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-5-20 21:41:18 | 显示全部楼层 |阅读模式
本帖最后由 gclome 于 2021-5-20 21:42 编辑

原文链接:Reproxy:一款功能强大的边缘服务器&反向代理工具



关于Reproxy

Reproxy是一个简单且功能强大的边缘HTTP(S)服务器和反向代理工具,该工具支持多种提供程序,比如说Docker或文件等等。这些提供程序负责给工具提供有关请求服务器的基础信息、URL地址、目标URL和运行状况检查URL等数据,能够以单个二进制文件或Docker容器的形式进行分发。
功能介绍
  • 基于Let’s Encrypt的自动化SSL终止;
  • 支持用户提供的SSL证书;
  • 简单但灵活的代理规则;
  • 静态命令行代理规则提供程序;
  • 基于文件的动态代理规则提供程序;
  • 具有自动发现功能的Docker提供程序;
  • 支持多个(虚拟)主机;
  • 可选流量压缩;
  • 用户定义的限制和超时;
  • 单二进制文件发布;
  • Docker容器发布;
  • 内置静态资产服务器;
  • 具有路由信息的管理服务器;
工具安装源码安装
广大研究人员可以访问该项目的Releases页面选择和获取对应版本的Reproxy。
Docker安装
Reproxy的Docker容器版本可以在Docker Hub上获取到,运行下列命令即可:
  1. docker pull umputun/reproxy
复制代码

  1. docker pull ghcr.io/umputun/reproxy
复制代码

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

静态规则

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

  2. example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping
复制代码

文件规则
  1. reproxy --file.enabled --file.name=config.ym
复制代码
下面给出的是config.yml文件样例:
  1. default: # the same as * (catch-all) server

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

  3.   - {

  4.       route: "/api/svc3/xyz",

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

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

  7.     }

  8. srv.example.com:

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

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

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

  2. reproxy.route

  3. reproxy.dest

  4. reproxy.port

  5. reproxy.ping

  6. reproxy.enabled
复制代码

工具使用
SSL支持

SSL模式(默认)可以设置为auto、static或none。如果设置为auto,则会自动为所有发现的服务器发布SSL证书,用户可以通过设置—ssl.fqdn值来修改配置。
Ping和健康检测Reproxy
针对该功能提供了两个节点:
  1. /ping:查看Reproxy的开启和运行情况;

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

管理API
这是一个可选项,能够使用“—mgmt.enabled”开启,此时会在mgmt.listen上暴露两个节点:
  1. GET /routes:枚举所有发现的路由

  2. GET /metrics:返回Prometheus metrics;
复制代码

所有可用的应用程序选项
  1. -l, --listen=                     listen on host:port (default: 127.0.0.1:8080) [$LISTEN]

  2.   -m, --max=                        max request size (default: 64000) [$MAX_SIZE]

  3.   -g, --gzip                        enable gz compression [$GZIP]

  4.   -x, --header=                     proxy headers [$HEADER]

  5.       --signature                   enable reproxy signature headers [$SIGNATURE]

  6.       --dbg                         debug mode [$DEBUG]

  7. ssl:

  8.       --ssl.type=[none|static|auto] ssl (auto) support (default: none) [$SSL_TYPE]

  9.       --ssl.cert=                   path to cert.pem file [$SSL_CERT]

  10.       --ssl.key=                    path to key.pem file [$SSL_KEY]

  11.       --ssl.acme-location=          dir where certificates will be stored by autocert manager (default: ./var/acme) [$SSL_ACME_LOCATION]

  12.       --ssl.acme-email=             admin email for certificate notifications [$SSL_ACME_EMAIL]

  13.       --ssl.http-port=              http port for redirect to https and acme challenge test (default: 80) [$SSL_HTTP_PORT]

  14.       --ssl.fqdn=                   FQDN(s) for ACME certificates [$SSL_ACME_FQDN]

  15. assets:

  16.   -a, --assets.location=            assets location [$ASSETS_LOCATION]

  17.       --assets.root=                assets web root (default: /) [$ASSETS_ROOT]

  18.       --assets.cache=               cache duration for assets (default: 0s) [$ASSETS_CACHE]

  19. logger:

  20.       --logger.stdout               enable stdout logging [$LOGGER_STDOUT]

  21.       --logger.enabled              enable access and error rotated logs [$LOGGER_ENABLED]

  22.       --logger.file=                location of access log (default: access.log) [$LOGGER_FILE]

  23.       --logger.max-size=            maximum size in megabytes before it gets rotated (default: 100) [$LOGGER_MAX_SIZE]

  24.       --logger.max-backups=         maximum number of old log files to retain (default: 10) [$LOGGER_MAX_BACKUPS]

  25. docker:

  26.       --docker.enabled              enable docker provider [$DOCKER_ENABLED]

  27.       --docker.host=                docker host (default: unix:///var/run/docker.sock) [$DOCKER_HOST]

  28.       --docker.network=             docker network [$DOCKER_NETWORK]

  29.       --docker.exclude=             excluded containers [$DOCKER_EXCLUDE]

  30.       --docker.auto                 enable automatic routing (without labels) [$DOCKER_AUTO]

  31. file:

  32.       --file.enabled                enable file provider [$FILE_ENABLED]

  33.       --file.name=                  file name (default: reproxy.yml) [$FILE_NAME]

  34.       --file.interval=              file check interval (default: 3s) [$FILE_INTERVAL]

  35.       --file.delay=                 file event delay (default: 500ms) [$FILE_DELAY]

  36. static:

  37.       --static.enabled              enable static provider [$STATIC_ENABLED]

  38.       --static.rule=                routing rules [$STATIC_RULES]

  39. timeout:

  40.       --timeout.read-header=        read header server timeout (default: 5s) [$TIMEOUT_READ_HEADER]

  41.       --timeout.write=              write server timeout (default: 30s) [$TIMEOUT_WRITE]

  42.       --timeout.idle=               idle server timeout (default: 30s) [$TIMEOUT_IDLE]

  43.       --timeout.dial=               dial transport timeout (default: 30s) [$TIMEOUT_DIAL]

  44.       --timeout.keep-alive=         keep-alive transport timeout (default: 30s) [$TIMEOUT_KEEP_ALIVE]

  45.       --timeout.resp-header=        response header transport timeout (default: 5s) [$TIMEOUT_RESP_HEADER]

  46.       --timeout.idle-conn=          idle connection transport timeout (default: 90s) [$TIMEOUT_IDLE_CONN]

  47.       --timeout.tls=                TLS hanshake transport timeout (default: 10s) [$TIMEOUT_TLS]

  48.       --timeout.continue=           expect continue transport timeout (default: 1s) [$TIMEOUT_CONTINUE]

  49. mgmt:

  50.       --mgmt.enabled                enable management API [$MGMT_ENABLED]

  51.       --mgmt.listen=                listen on host:port (default: 0.0.0.0:8081) [$MGMT_LISTEN]

  52. Help Options:

  53.   -h, --help                        Show this help message
复制代码

项目地址
Reproxy:https://github.com/umputun/reproxy
















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 02:46 , Processed in 0.013197 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表