首页 > 文章列表 > gondola:为什么不使用轻量级且简单的基于 YAML 的反向代理?

gondola:为什么不使用轻量级且简单的基于 YAML 的反向代理?

428 2024-09-01

gondola:为什么不使用轻量级且简单的基于 YAML 的反向代理?

什么是贡多拉?

gondola 是 go 制作的反向代理,只需用 yaml 编写配置文件即可轻松使用。

可以在awesome-go找到。

它仅使用go的标准库实现,并具有以下功能

  • 虚拟主机
    • 您可以在上游服务器上设置多个主机。
  • 配置文件加载器
    • 可以使用yaml格式的配置文件。
  • tls
    • 您可以通过准备 tls 证书来使用 tls。
  • 提供静态文件
    • 您可以提供静态文件。
  • 访问日志
    • 输出代理访问日志和上游服务器访问日志。
  • 二进制分布
    • 分发交叉编译的二进制文件。

动机

我经营一个名为 bmf-tech.com 的博客,这是我用 go 自己构建的。

博客曾经有一个使用nginx构建的反向代理。

我的博客系统的架构并不复杂,我想一个可以通过更简单的配置进行操作的反向代理就足够了。

所以我决定构建自己的反向代理,可以使用更简单的配置文件进行配置,而不是像 nginx 那样具有灵活语法的配置文件。

我实际上在自己的博客系统中使用了gondola,到目前为止它很简单且易于运行。

缆车的使用方法

您可以通过 go get 命令或下载 binary 来使用 gondola。

go get -u github.com/bmf-san/gondola

二进制文件可从版本中获得。

docker 镜像也可以从 bmf-san/gondola 获得。

在配置文件中配置好代理服务器(gondola)和上游服务器后,只需启动gondola即可。

# example config.yaml
proxy: (default)
  port: 443
  read_header_timeout: 2000
  shutdown_timeout: 3000
  tls_cert_path: certificates/cert.pem
  tls_key_path: certificates/key.pem
  static_files: /public/static_files
    - path: /public/
      dir: . /public
upstreams: host_name: backend1.local
  - host_name: backend1.local
    target: http://backend1:8081 # backend1 is the name of the container
  - host_name: backend2.local
    target: http://backend2:8082 # backend2 is the name of the container
log_level: 0 # debug:-4 info:0 warn:4 error:8

启动缆车如下:

gondola -config config.yaml

我们还有_示例,如果您愿意,您可以立即尝试。

在 go 中实现反向代理

有关 go 中的反向代理实现,请参阅在 golang 中实现负载均衡器。

本文介绍了如何实现负载均衡器,但由于它是基于反向代理实现的,因此可能会有所帮助。

贡献

gondola 欢迎问题和 pull 请求。

当然star也受欢迎

我们仍然缺少 gondola 的一些功能和实现,因此我们希望继续改进它。

  • 优雅关闭
  • 上游服务器健康检查
  • 配置文件重新加载
  • 通讯成本优化
  • 负载均衡
  • 其他可扩展性实施调整

请随时提供反馈。

来源:https://dev.to/bmf_san/gondola-why-not-use-a-lightweight-and-simple-yaml-based-reverse-proxy-3454

本类最新

查看更多