Skip to content
Reverse-proxy with Weighted Round Robin load-balancer.
Go Dockerfile Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cli added dns resolvers Aug 4, 2019
resources
reverse-proxy added dns resolvers Aug 4, 2019
vendor
.gitignore
Dockerfile upgrade command-line interface Aug 4, 2019
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md update README [ci skip] Aug 4, 2019
main.go

README.md

RP

Reverse Proxy with Weighted Round Robin balancer.

A reverse proxy server is an intermediate connection point positioned at a network’s edge. It receives initial HTTP connection requests, acting like the actual endpoint.

Image credit: What is Reverse Proxy

Installation

$ go get -u github.com/ahmdrz/rp

CommandLine

Running reverse proxy without balancer:

$ rp --config rpconfig.yaml --verbose serve

Example of configuration file

listenaddr: 0.0.0.0:8080

# you can change domain name servers using
dnslist: ["8.8.8.8", "4.2.2.4"]

targets:
- address: http://api.server1.com
  weight: 3
- address: http://api.server2.com
  weight: 2

Generate default configuration file

$ rp --config rpconfig.yaml generate

API

package main

import (
  "log"
  "net/url"
  
  rp "github.com/ahmdrz/rp/reverse-proxy"
)

func newURL(addr string) *url.URL {
	u, err := url.Parse(addr)
	if err != nil {
		log.Fatal(err)
	}
	return u
}

func main() {
  proxy := rp.New()
  proxy.Log(true)
  
  // Add will append a new endpoint to rp
  // Round-Robin only works if you add more than 1 endpoint
  // weights must be positive and greater than 0
  proxy.Add(newURL("https://api.server1.com"), 1)

  // You can also change DNS if you want using
  proxy.ChangeDNS("8.8.8.8"...)
	
  proxy.ListenAndServe("0.0.0.0:8080")
}

Using Docker

FROM ahmdrz/rp:latest
COPY rpconfig.yaml .
EXPOSE 8080
CMD ["rp", "--verbose", "serve"]

Todo

  • Better CLI Application
  • Failover Solution
  • Health Check
You can’t perform that action at this time.