An open API service indexing awesome lists of open source software.

https://github.com/ahmdrz/rp

Reverse-proxy with Weighted Round Robin (WRR) load-balancer
https://github.com/ahmdrz/rp

iranian reverse-proxy round-robin

Last synced: 3 months ago
JSON representation

Reverse-proxy with Weighted Round Robin (WRR) load-balancer

Awesome Lists containing this project

README

          

## 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

```yaml
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

```go
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

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

### Todo

- [x] Better CLI Application
- [ ] Failover Solution
- [ ] Health Check