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
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.
Top comments (0)