Sign inSign up

ahmdrz/rp

By ahmdrz

Updated about 7 years ago

Image
0

1.1K

ahmdrz/rp repository overview

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

Tag summary

Content type

Image

Digest

Size

150.3 MB

Last updated

about 7 years ago

docker pull ahmdrz/rp