


gondola: Why not use a lightweight and simple YAML-based reverse proxy?
Aug 12, 2024 am 06:08 AMWhat 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
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
Start gondola as follows:
gondola -config config.yaml
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!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

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 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 can I define custom type constraints for generics in Go?

How to write files in Go language conveniently?

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