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
- Host: GitHub
- URL: https://github.com/ahmdrz/rp
- Owner: ahmdrz
- License: mit
- Created: 2019-07-29T08:30:29.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-08-18T11:48:59.000Z (about 2 years ago)
- Last Synced: 2025-06-10T20:53:58.472Z (4 months ago)
- Topics: iranian, reverse-proxy, round-robin
- Language: Go
- Homepage:
- Size: 1.57 MB
- Stars: 23
- Watchers: 2
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 mainimport (
"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