37 lines
1.0 KiB
Markdown
37 lines
1.0 KiB
Markdown
# HostSplitter
|
|
HostSplitter is an HTTP reverse proxy and load balancer that distributes requests to an arbitrary amount of sites based on the Host header.
|
|
|
|
|
|
## Motivation
|
|
I commonly run into an issue developing small golang websites: I want to use the same IP address for many sites that aren't large enough to justify their own server.
|
|
|
|
## Site files
|
|
HostSplitter will look for site files by default in "/etc/hostsplitter/". HostSplitter will only read files with the .json extension.
|
|
|
|
A each site file should look like
|
|
```json
|
|
{
|
|
"hostnames": [
|
|
"ammar.io",
|
|
"www.ammar.io"
|
|
],
|
|
"backends": [
|
|
"127.0.0.1:9000"
|
|
],
|
|
"secret": "puppies1234"
|
|
}
|
|
```
|
|
|
|
The "secret" field is passed along with every request to that site in the ``X-Hostsplitter-Secret`` header. This is intended to be checked before trusting the passed along IP.
|
|
|
|
## Real IP
|
|
The original requester's IP is located in the ``X-Forwarded-For`` header.
|
|
|
|
## Reloading
|
|
HostSplitter provides 0 downtime reload functionality via SIGUSR1. E.g
|
|
```bash
|
|
pkill -10 hostsplitter
|
|
```
|
|
|
|
## Roadmap
|
|
- SSL |