• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / reproxy
81%

Build:
DEFAULT BRANCH: master
Repo Added 10 Apr 2021 12:20AM UTC
Files 20
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: master
CHANGE BRANCH
x
Reset
  • master
  • add-X-Forwarded-URL
  • assets-cache
  • assets404
  • basic-auth
  • chore/go-1.26-and-deps
  • ci/workflow-hardening
  • dependabot/docker/goreleaser/goreleaser-v1.25.1
  • dependabot/github_actions/github-actions-updates-a2e7793ad6
  • dependabot/go_modules/go-modules-updates-07f3a6036d
  • dependabot/go_modules/go-modules-updates-1d93b033d5
  • dependabot/go_modules/go-modules-updates-89f9fe7d2d
  • dependabot/go_modules/go-modules-updates-a76f434722
  • dependabot/go_modules/go-modules-updates-b6eb7de9c2
  • dependabot/go_modules/go-modules-updates-b9a07c6e8d
  • dependabot/go_modules/go-modules-updates-c2f73b432e
  • dependabot/go_modules/go-modules-updates-c741a0ad90
  • dependabot/go_modules/golang.org/x/crypto-0.45.0
  • dependabot/go_modules/golang.org/x/net-0.23.0
  • dependabot/go_modules/golang.org/x/net-0.38.0
  • dependabot/go_modules/golang.org/x/text-0.3.8
  • dependabot/npm_and_yarn/site/browserslist-4.16.6
  • dependabot/npm_and_yarn/site/follow-redirects-1.14.7
  • dependabot/npm_and_yarn/site/follow-redirects-1.14.8
  • dependabot/npm_and_yarn/site/markdown-it-12.3.2
  • dependabot/npm_and_yarn/site/minimist-1.2.6
  • dependabot/npm_and_yarn/site/nanoid-3.2.0
  • dependabot/npm_and_yarn/site/normalize-url-4.5.1
  • dependabot/npm_and_yarn/site/shell-quote-1.7.3
  • dependabot/npm_and_yarn/site/ws-7.4.6
  • docker-maker
  • docker-multi-routes
  • dockerhub
  • drop-default-conflict
  • dynamic-server
  • feat/low-cardinality-metrics
  • feature/add-dns-providers
  • feature/upstream-connection-limits
  • fix-404-gzip-encoding
  • fix-dbl-headers
  • fix-header-parsing
  • fix/bound-mappers-cache
  • fix/bump-x-net
  • fix/catchall-default-route-dedup
  • fix/ci-security-hardening
  • fix/critical-major-audit-findings
  • fix/dns-propagation-timeout
  • fix/docker-api-version-240
  • fix/dynamic-ssl-fqdns-207
  • fix/encoded-path-match
  • fix/file-provider-debounce
  • fix/health-test-timing
  • fix/metrics-flusher-sse-streaming
  • fix/roundrobin-shrinking-n
  • fqdn-async-discovery
  • gzip-exclude
  • header-comma
  • lb-selector
  • libdns-update
  • limit-ips
  • listen
  • maint/deps-update-nov2025
  • max-request-url
  • mgmt
  • mime-cache
  • multi-match
  • multi-static
  • nice-error
  • paskal/dependabot-disable-updates
  • paskal/dependabot-security-updates
  • paskal/docker-user-improvements
  • paskal/dockerfile-improvements
  • per-route-auth
  • per-route-timeout-throttle
  • plugin-headers
  • redirect
  • refs/tags/v0.1.0
  • refs/tags/v0.10.0
  • refs/tags/v0.11.0
  • refs/tags/v0.2.0
  • refs/tags/v0.3.0
  • refs/tags/v0.4.0
  • refs/tags/v0.5.0
  • refs/tags/v0.5.1
  • refs/tags/v0.6.0
  • refs/tags/v0.6.1
  • refs/tags/v0.6.2
  • refs/tags/v0.7.0
  • refs/tags/v0.8.0
  • refs/tags/v0.9.0
  • refs/tags/v1.0.0
  • refs/tags/v1.1.0
  • refs/tags/v1.1.1
  • refs/tags/v1.2.0
  • refs/tags/v1.2.1
  • refs/tags/v1.2.2
  • refs/tags/v1.2.3
  • refs/tags/v1.3.0
  • refs/tags/v1.4.0
  • refs/tags/v1.5.0
  • refs/tags/v1.6.0
  • refs/tags/v1.7.1
  • refs/tags/v1.7.2
  • release-automation
  • release-pipeline
  • rpc
  • server-simple-pattern
  • spa
  • throttle
  • trusted-proxy

28 Oct 2026 01:44AM UTC coverage: 81.071% (+0.6%) from 80.423%
40616822588

push

github

web-flow
fix: take X-Real-IP from the TCP peer, add --trusted-proxy (#267)

* fix: take X-Real-IP from the TCP peer, add --trusted-proxy

X-Real-IP was the left-most public address of the client-supplied
X-Forwarded-For, so any client could set the address backends see. It is now
the TCP peer. With --trusted-proxy (IP or CIDR, repeatable), a request from a
trusted peer gets the client address by walking X-Forwarded-For right to left,
stopping at the first untrusted address or at a malformed entry.

- route allowlists use the same client address; --remote-lookup-headers is
  deprecated and reproxy refuses to start with it unless --trusted-proxy is set
- Forwarded and X-Forwarded-Host/Proto/Port from an untrusted peer are dropped
- ReverseProxy uses Rewrite instead of the deprecated Director, so a client
  can't strip the headers reproxy sets by naming them in Connection
- ssl.go lint fixes: strings.Cut, drop the ignored PreferServerCipherSuites

* fix: key per-user throttling on the resolved client address

tollbooth.NewLimiter looks up X-Forwarded-For first, then X-Real-IP, then
RemoteAddr, so a client could pick a new throttle bucket for every request by
changing either header. Both the per-route and the global user limiter now key
on the same client address reproxy sends in X-Real-IP: the TCP peer, or the
X-Forwarded-For walk when the peer is in --trusted-proxy.

Behind a CDN without --trusted-proxy, clients are grouped by the CDN's peer
address. README covers this, with a Cloudflare note linking #172.

* docs: note forwarding headers set by plugins follow the trusted-proxy rules

X-Real-IP, X-Forwarded-For, Forwarded and X-Forwarded-Host/Proto/Port that a
plugin sets through HeadersIn are written into the incoming request, so they
are handled like client-sent ones. A plugin's X-Forwarded-Proto reaches the
backend only when the request came from a trusted proxy.

151 of 156 new or added lines in 6 files covered. (96.79%)

2891 of 3566 relevant lines covered (81.07%)

87.34 hits per line

Relevant lines Covered
Build:
Build:
3566 RELEVANT LINES 2891 COVERED LINES
87.34 HITS PER LINE
Source Files on master
  • Tree
  • List 20
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
40616822588 master fix: take X-Real-IP from the TCP peer, add --trusted-proxy (#267) * fix: take X-Real-IP from the TCP peer, add --trusted-proxy X-Real-IP was the left-most public address of the client-supplied X-Forwarded-For, so any client could set the address... push 28 Oct 2026 01:45AM UTC web-flow github
81.07
40461204219 master fix: keep range responses intact under gzip, add --gzip-exclude (#266) * fix: keep range responses intact under gzip, add --gzip-exclude With --gzip on, compression ignored the response type and range headers. A 206 could go out gzipped while Co... push 27 Oct 2026 06:30AM UTC web-flow github
80.42
34050351647 master fix: keep Content-Encoding on gzip-compressed error responses (#265) * fix: keep Content-Encoding on compressed error responses With gzip enabled, the file server's error path (custom or default 404, 416) drops Content-Encoding while the body st... push 06 Sep 2026 06:02PM UTC web-flow github
79.88
32434321318 master fix: bound mapper cache and reuse host regexes (#262) push 21 Aug 2026 12:54AM UTC web-flow github
79.83
32434312810 master test: stabilize health handler timing (#263) push 21 Aug 2026 12:54AM UTC web-flow github
79.72
32434317301 master fix: match routes on canonical escaped paths (#261) push 21 Aug 2026 12:54AM UTC web-flow github
79.75
32349290866 master fix: make DNS-01 propagation timeout configurable (#260) * fix: make DNS-01 propagation timeout configurable CertMagic waits 2 minutes for challenge records to propagate and reproxy never set the field, so a zone publishing slower than that coul... push 20 Aug 2026 08:33AM UTC web-flow github
79.75
32327652867 master docs: backlog item for the four golangci-lint v2.13.0 findings pin at v2.12.2 is a version baseline, not a fix. Records the four findings and that the pin advance must ship in the same change as the fixes. push 20 Aug 2026 03:19AM UTC umputun github
79.73
32326507406 master ci: gate release publishers on tests (#259) * ci: gate release publishers on tests a failed tag build could still publish binaries while container publication was skipped. Keep both tag publishers behind one native test gate and restrict the pri... push 20 Aug 2026 03:00AM UTC web-flow github
79.73
29387698115 master test: fix flaky tests from getFreePort port-allocation race getFreePort bound 127.0.0.1:0, closed the listener, and returned only the port, so an httptest.NewServer created later in setup could grab that freed port. h.Run then failed to bind and ... push 15 Jul 2026 03:57AM UTC umputun github
79.67
See All Builds (716)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc