https://github.com/mdouchement/ergo
Ergo is an HTTP/HTTPS proxy with authentication support. Works at TCP level.
https://github.com/mdouchement/ergo
authentication http https proxy
Last synced: 11 months ago
JSON representation
Ergo is an HTTP/HTTPS proxy with authentication support. Works at TCP level.
- Host: GitHub
- URL: https://github.com/mdouchement/ergo
- Owner: mdouchement
- License: mit
- Created: 2020-10-17T14:36:01.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2024-05-09T19:49:51.000Z (over 1 year ago)
- Last Synced: 2025-01-07T06:50:02.344Z (about 1 year ago)
- Topics: authentication, http, https, proxy
- Language: Go
- Homepage:
- Size: 117 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ergo
Ergo is an HTTP/HTTPS proxy that supports `Proxy-Authorization` authentication.
Features:
- HTTP/HTTPS
- Authentication
- Deny list using [urlfilter](https://github.com/AdguardTeam/urlfilter) package
- Cache domain name resolution results
## How does it work
### HTTP
1. Accept TCP connection
2. Catch the request header
3. Open the TCP tunnel to the remote
4. Forward through TCP pipeline the whole request to the remote
### HTTPS
1. Accept TCP connection
2. Catch CONNECT request
3. Open the TCP tunnel to the remote provided by the CONNECT request. So it supports HTTP2 multiplexed flow
4. Respond `200 OK` to the client to inform the tunnel is opened
5. Forward through TCP pipeline all the raw data
## tls-forwarder
Useful when Ergo is behind a router like Traefik with TLS enabled and your client doesn't support TLS proxy endpoint.
Workflow:
1. Forwarder opens a TCP connection to Ergo through the router
2. Perform TLS handshake with the router TLS
3. Forward through TCP pipeline all the raw data to be proxified
## License
**MIT**
## Contributing
All PRs are welcome.
1. Fork it
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
5. Push to the branch (git push origin my-new-feature)
6. Create new Pull Request