Git Product home page Git Product logo

hyproxy's People

Contributors

king6cong avatar moosingin3space avatar tee-too avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hyproxy's Issues

Add Let's Encrypt support

I'd like it to be easy as possible to set up TLS with Hyproxy. Built-in Let's Encrypt support, Caddy-style, would be awesome.

Multi-threaded event loop

Right now, hyproxy's event loop is single-threaded. In order to match the performance of other reverse proxies, hyproxy will need to use a multi-threaded event loop.

Add CI support

There should be some sort of CI running unit tests.

This will probably require more modularity in the code.

Dynamic Upstream/Backends

One thing that none of the prevailing reverse proxy solutions except for Traefik handle the need for an elastic (or previously unknown) set of upstream servers. A compelling feature for hyproxy would be the ability to be able to resolve DNS on the fly (and cache the collection of servers for a short time) for upstreams. Varnish-Goto can do that, but even it isn't quite as flexible as I'd like for our kubernetes cluster, where the proxy may not know that an endpoint exists before I synthesize the upstream dns name.

Example :
inbound request:
host: foosvc.loadbalancer.mycluster.org
Gets translated to Kubernetes local service as the upstream address:
foosvc.svc.default.cluster.local

(we don't know that foosvc exists until we receive a request for it)

I understand that it is absolutely not trivial, and would likely require a concurrent thread that is curating the resulting pools of URL -> IP address mappings. But it it had such a feature, it would become immediately useable in any kubernetes, docker-swarm, or mesosphere cluster with almost 0 configuration. And no need to communicate with the cluster oracles.

Consider integrating body_image

See body_image.

An integration could enable Hyproxy to have similar features to nginx as a reverse proxy, where it can reduce proxied server connections by buffering to disk.

Just for the "Static files support" goal, the master branch (candidate for body_image 0.4.0 release) now has zero-copy/async. support for memory mapped http bodies using (glibc) madvise(SEQUENTIAL) (for aggressive OS read-ahead), and using tokio-threadpool blocking annotation.

With more work, body_image could be part of a disk-based proxy caching solution ala varnish.

Would you consider such and integration? Thanks!

static file serving

As mentioned on reddit: I noticed you have "static file serving" described as a required feature for a 1.0 release.

A plug: https://github.com/scottlamb/http-entity is intended to be useful for this: it handles the conditional GET, byte range serving, and such. The hyper-0.11.x branch is async. You're most welcome to use them if you find them helpful; and if you don't find them helpful, I'd like to fix that.

My crate's young. There's no continuous build yet; the docs haven't gotten much attention; the APIs aren't stable yet; and I'm not in love with the current names http-entity and http-file. On the bright side, that means it's a good time if you have strong opinions on these things. Some possible upcoming API changes:

  • the type of a given Entity's body stream and chunk type could become associate types rather than the current generics.
  • http_entity::serve could become a trait method rather than its current free function. My habit is pure interfaces from languages such as Go, but it seems a lot of Rust stuff such as futures puts a lot of functionality in trait methods that the implementer doesn't need to override.
  • http_file::ChunkedReadFile::new could move into a builder.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.