Home Backend Development Golang gondola: Why not use a lightweight and simple YAML-based reverse proxy?

gondola: Why not use a lightweight and simple YAML-based reverse proxy?

Aug 12, 2024 am 06:08 AM

gondola: Why not use a lightweight and simple YAML-based reverse proxy?

What is a gondola?

gondola is a reverse proxy made by Go that is easy to use by simply writing a configuration file in YAML.

It can be found at awesome-go.

It is implemented using only Go's standard libraries and has the following features

  • Virtual host
    • You can set up multiple hosts on upstream servers.
  • Configuration file loader
    • You can use configuration files in YAML format.
  • TLS
    • You can use TLS by preparing a TLS certificate.
  • Serve static files
    • You can serve static files.
  • Access log
    • Outputs Proxy access logs and Upstream servers access logs.
  • Binary distribution
    • Distributing cross-compiled binaries.

Motivation

I run a blog called bmf-tech.com, which I built myself in Go.

The blog used to have a reverse proxy built using Nginx.

The architecture of my blog system is not complex, and I thought a reverse proxy that can be operated with a simpler configuration would be sufficient.

So I decided to build my own reverse proxy that can be configured with a simpler configuration file rather than a configuration file with a flexible syntax like Nginx.

I am actually using gondola in my own blogging system, and so far it is simple and easy to run.

How to use gondola

You can use gondola by using the go get command or by downloading Binary.

go get -u github.com/bmf-san/gondola
Copy after login

Binary is available from releases.

Docker images are also available from bmf-san/gondola.

Once the proxy server (gondola) and upstream server are configured in the configuration file, simply start 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
Copy after login

Start gondola as follows:

gondola -config config.yaml
Copy after login

We also have _examples that you can try out right away if you want.

Implementing a reverse proxy in Go

For a reverse proxy implementation in Go, see Implement a load balancer in Golang.

This article introduces how to implement a load balancer, but since it is based on a reverse proxy implementation, it may be helpful.

Contribution

gondola welcomes Issues and Pull Requests.

Of course, Star is also welcome.

We are still missing some features and implementation of gondola, so we would like to continue to improve it.

  • Graceful shutdown
  • Upstream server health check
  • Configuration file reload
  • Communication cost optimization
  • Load balancing
  • Other implementation adjustments for scalability

Please feel free to provide feedback.

The above is the detailed content of gondola: Why not use a lightweight and simple YAML-based reverse proxy?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Go language pack import: What is the difference between underscore and without underscore? Go language pack import: What is the difference between underscore and without underscore? Mar 03, 2025 pm 05:17 PM

Go language pack import: What is the difference between underscore and without underscore?

How to implement short-term information transfer between pages in the Beego framework? How to implement short-term information transfer between pages in the Beego framework? Mar 03, 2025 pm 05:22 PM

How to implement short-term information transfer between pages in the Beego framework?

How to convert MySQL query result List into a custom structure slice in Go language? How to convert MySQL query result List into a custom structure slice in Go language? Mar 03, 2025 pm 05:18 PM

How to convert MySQL query result List into a custom structure slice in Go language?

How do I write mock objects and stubs for testing in Go? How do I write mock objects and stubs for testing in Go? Mar 10, 2025 pm 05:38 PM

How do I write mock objects and stubs for testing in Go?

How can I define custom type constraints for generics in Go? How can I define custom type constraints for generics in Go? Mar 10, 2025 pm 03:20 PM

How can I define custom type constraints for generics in Go?

How do you write unit tests in Go? How do you write unit tests in Go? Mar 21, 2025 pm 06:34 PM

How do you write unit tests in Go?

How to write files in Go language conveniently? How to write files in Go language conveniently? Mar 03, 2025 pm 05:15 PM

How to write files in Go language conveniently?

How can I use tracing tools to understand the execution flow of my Go applications? How can I use tracing tools to understand the execution flow of my Go applications? Mar 10, 2025 pm 05:36 PM

How can I use tracing tools to understand the execution flow of my Go applications?

See all articles