aboutsummaryrefslogtreecommitdiff
pipkin is an S3 HTTP gateway, designed to support the hosting of static websites
from S3 platforms which do not natively provide first-class support for custom
HTTP/TLS termination (e.g. Backblaze B2), and support the use of less-popular
(or even self-managed) content delivery networks.

pipkin transparently pipes responses received from S3 directly to clients; it
consumes ~15MB of RAM and supports concurrent downloads of over 10Gbit/s, and
has no dependencies.

pipkin maps host headers to unique buckets/paths, so it's possible to host
multiple websites from a single bucket. client requests and S3 responses are
filtered against sets of authorized headers. webserver-style indexes and
directory listings are supported. HTTP sockets are re-used between requests.

to improve performance and reduce redundant API transactions/financial DoS, it's
recommended to host pipkin behind a caching proxy (e.g. NGINX) and refresh stale
caches in the background between requests:

location / {
  proxy_pass http://127.0.0.1:8085;
  proxy_cache proxycache;
  proxy_cache_revalidate on;
  proxy_cache_background_update on;
  proxy_cache_lock on;
  proxy_cache_lock_timeout 1s;
  proxy_cache_use_stale updating error timeout http_404 http_500;
  proxy_cache_valid 200 302 10m;
  proxy_cache_valid 404      1m;
}

Usage of ./pipkin:
  -conf string
        path to JSON config (default "pipkin.json")
  -templates string
        path to template directory (default "./templates")