Simple Reverse Proxy with Caching, written in Go, using Redis.

Go Proxy Cache

Logo

Simple Reverse Proxy with Caching, written in Go, using Redis.
>>> (semi) production-ready <<<

MIT License Pull Requests Maintenance Mentioned in Awesome Go

Last Commit Release Date GitHub all releases

GitHub go.mod Go version GitHub release (latest by date)

Docker pulls Docker stars

GitHub Workflow Status

CII Best Practices BCH compliance Go Report Card FOSSA Status
codecov Maintainability Technical Debt Total alerts


💗 Support the Project 💗

This project is only maintained by one person, Fabio Cicerchia.
It started as a simple caching service, now it has a lot of pro functionalities just for FREE 😎
Maintaining a project is a very time consuming activity, especially when done alone 💪 I really want to make this project better and become super cool 🚀

Two commercial versions have been planned: PRO and PREMIUM.

The development of the COMMUNITY version will continue, but priority will be given to the COMMERCIAL versions.

  • If you'd like to support this open-source project I'll appreciate any kind of contribution.
  • If you'd like to sponsor the commercial version, please get in touch with me.

How it works

When the request is cached:

        .---------.       .---------.       .---------.
        |         |       |         |       |         |
        |         |       |         |       |         |
you --->|---->----|--->---|---->----|--->---|-->--.   |
        |         |       |         |       |     |   |
    <---|----<----|---<---|----<----|---<---|--<--'   |
        `---------´       `---------´       `---------´
          network        go-proxy-cache        redis

When the request is not cached:

          website
            ,_,
            | |
        .---+-+---.       .---------.       .---------.
        |   | '-->|--->---|---->----|--->---|-->--,   |
        |   '-<---|---<---|<--,     |       |     |   |
        |         |       |   |     |       |     |   |
you --->|---->----|--->---|---'     |       |     |   |
        |         |       |         |       |     |   |
    <---|----<----|---<---|----<----|---<---|--<--'   |
        `---------´       `---------´       `---------´
          network        go-proxy-cache        redis

Features

Small, Pragmatic and Easy to Use

  • Dockerized
  • Compiled
  • Easily Configurable, via YAML or Environment Variables.
  • Self-Contained, does not require Go, Git or any other software installed. Just run the binary or the container.

Caching

  • Full Page Caching, via Redis.
  • Cache Invalidation, by calling HTTP Method PURGE on the resource URI.
  • Cache Bypass, by using the HTTP Header X-Go-Proxy-Cache-Force-Fresh the request will always be fresh.
  • Support Chunking, by replicating exactly the same original amount.
  • Selective HTTP Status Codes/Methods, allows caching for different response codes or HTTP methods.
  • ETag Support, generating non-weak tags, handling 304 Not Modified, managing HTTP headers If-Modified-Since, If-Unmodified-Since, If-None-Match, If-Match.
    ETag wrapper doesn't work well with WebSocket and HTTP/2.
  • Cache Stampede Prevention, delaying invalidation request to the backend using an extra small random TTL (between 5s and 10s).
  • Serving Stale Content, used mainly for avoiding cache stampede, for maximum 10s.
  • Upstream DNS Resolution Cache, the upstream hostname will be cached to speed up the response and avoid the DNS resolution at each request.

Load Balancing

  • HTTP & HTTPS Forward Traffic
  • Load Balancing, uses a list of IPs/Hostnames as load balanced backend servers.
  • Multiple Algorithms Available, choose among IP Hash, Least Connections, Random or Round-Robin.
  • Support for HTTP Basic Auth, it's possible to provide the HTTP Basic Auth for each endpoint (by specify user:pass in the URL).

Security

  • HTTP/2 Support, HTTP/2 Pusher is achievable only if upstream implements HTTP header Link.
  • SSL/TLS Certificates via ACME, provides automatic generation of SSL/TLS certificates from Let's Encrypt and any other ACME-based CA.
  • Using your own SSL/TLS Certificates, optional.

Reliability

  • Healthcheck Endpoint, exposes the route /healthcheck (internally).
  • Upstream Healthcheck, verifies periodically if upstream nodes are healthy.
  • Respecting HTTP Cache Headers, Vary, ETag, Cache-Control and Expires.
  • Fully Tested, Unit, Functional & Linted & 0 Race Conditions Detected.
  • Cache Circuit Breaker, bypassing Redis when not available.

Scaling

  • Multiple domains, override and fine-tune the global settings per domain.

Customisations

  • HTTP to HTTPS Redirects, optional, status code to be used when redirecting HTTP to HTTPS.
  • GZip Compression, optional.
  • Server Timeouts, it is possible to configure in details the server overall timeouts (read, write, headers, handler, idle).
  • Fine tuning circuit-breaker and TLS settings, it is possible to adjust the settings about thresholds, timeouts and failure rate.
  • Configure error handler, stdout or file.
  • Debug/Verbose mode, it is possible to have additional levels of details by settings the flags -verbose or -debug.

Logging

  • Request Tracing, each line in logs has a RequestID to easily identify the response flow.
  • OpenTelemetry Tracing, each request has a deep tracing with Jaeger (optional).
  • Prometheus Endpoint, exposes the route /metrics (internally) to serve Prometheus metrics.
  • Support for Sentry & Syslog, all warning/error logs can be forwarded to Sentry and/or Syslog.

Configuration

YAML

This is a simple (and not comprehensive) configuration:

server:
  port:
    http: "80"
    https: "443"
  tls:
    cert_file: server.pem
    key_file: server.key
  upstream:
    host: ~
    port: 443
    scheme: https
    endpoints:
      - 127.0.0.1
    http_to_https: true
    redirect_status_code: 301

cache:
  host: localhost

domains:
  example_com:
    server:
      upstream:
        host: example.com

  example_org:
    server:
      upstream:
        host: example.org

For more details about the full server configuration check the relative documentation in docs/CONFIGURATION.md

Examples

CLI

$ go-proxy-cache -h
Usage of go-proxy-cache:
  -config string
        config file (default "config.yml")
  -debug
        enable debug
  -log string
        log file (default stdout)
  -test
        test configuration
  -verbose
        enable verbose
  -version
        display version
[...]

For examples check the relative documentation in docs/EXAMPLES.md

Release Cycle

  • Bug-fixes (e.g. 1.1.1, 1.1.2, 1.2.1, 1.2.3) are released as needed (no additional features are delivered in those versions, bug-fixes only).
  • Each version is supported until the next one is released (e.g. 1.1.x will be supported until 1.2.0 is out).
  • We use Semantic Versioning.

Common Errors

  • acme/autocert: server name component count invalid
    Let's Encrypt cannot be used locally, as described in this thread
  • acme/autocert: missing certificate
    Let's Encrypt cannot be used locally, as described in this thread
  • 501 Not Implemented
    If there's no domain defined in the main configuration nor in the domain overrides, and a client will request an unknown domain the status 501 is returned.
  • WebSocket and TimeoutHandler are not working together, because TimeoutHandler doesn't support Hijacker, so in order to have WebSocket support the setting TimeoutHandler must be set to -1.
  • context deadline exceeded
    The reason is because the timeout on the context.Context of the client side of the request is shorter than the timeout in the server side handler. This means that the client gives up before any response is written.

References

License

OpenSSL

This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)

Go Proxy Cache

MIT License

Copyright (c) 2020 Fabio Cicerchia [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

FOSSA Status

Owner
Fabio Cicerchia
I'm Fabio, a Passionate Solutions Architect with 17+ years of experience. I'm enjoying creating quality web applications using cutting-edge technologies.
Fabio Cicerchia
Comments
  • Missing locks on write/read on redis

    Missing locks on write/read on redis

    Make sure there won't be any data race while one request is writing data to Redis and another one is reading the same keys. It would be helpful to implement a locking system like:

    • https://redis.io/commands/setnx
    • https://github.com/go-redsync/redsync

    The lock should not be on the client as a whole, but should be on the key:

    • reads on 2 different keys: allowed
    • reads on the same key: allowed
    • writes on 2 different keys: allowed
    • writes on the same key: blocked
  • Fails with error

    Fails with error "no such file or directory"

    Describe the bug When trying to run the provided Docker examples, I am getting an error "no such file or directory".

    To Reproduce Steps to reproduce the behavior:

    % docker run -it --rm fabiocicerchia/go-proxy-cache go-proxy-cache -debug -verbose
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:109 main.main()                                                                         __ 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:110 main.main() .-----.-----.______.-----.----.-----.--.--.--.--.______.----.---.-.----|  |--.-----. 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:111 main.main() |  _  |  _  |______|  _  |   _|  _  |_   _|  |  |______|  __|  _  |  __|     |  -__| 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:112 main.main() |___  |_____|      |   __|__| |_____|__.__|___  |      |____|___._|____|__|__|_____| 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:113 main.main() |_____|            |__|                   |_____|
     
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:114 main.main() Copyright (c) 2020 Fabio Cicerchia. https://fabiocicerchia.it. MIT License 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:115 main.main() Repo: https://github.com/fabiocicerchia/go-proxy-cache
     
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:117 main.main() Version: 0.3.0                               
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:118 main.main() Go: go1.16.3                                 
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:119 main.main() Threads: 4                                   
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:120 main.main() OS: linux                                    
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/main.go:121 main.main() Arch: amd64
                                     
    INFO[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/server/server.go:44 github.com/fabiocicerchia/go-proxy-cache/server.Run() Starting...                                  
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/config/config.go:373 github.com/fabiocicerchia/go-proxy-cache/config.Print() Config Settings:                             
    DEBU[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/config/config.go:374 github.com/fabiocicerchia/go-proxy-cache/config.Print() {Server:{Port:{HTTP:80 HTTPS:443} TLS:{Auto:false Email:[email protected] CertFile: KeyFile: Override:0xc00025e180} Timeout:{Read:5s ReadHeader:2s Write:5s Idle:20s Handler:5s} Upstream:{Host: Port:443 Scheme: Endpoints:[127.0.0.1 127.0.1.2:443] InsecureBridge:false HTTP2HTTPS:true RedirectStatusCode:301} GZip:false Healthcheck:true} Cache:{Host:localhost Port:6379 Password: DB:0 TTL:0 AllowedStatuses:[200 301 302] AllowedMethods:[HEAD GET]} CircuitBreaker:{FailureRate:0.5 Interval:0s Timeout:1m0s Threshold:2 MaxRequests:1} Domains:map[example_com:{Server:{Port:{HTTP:80 HTTPS:443} TLS:{Auto:false Email:[email protected] CertFile: KeyFile: Override:0xc00025e180} Timeout:{Read:5s ReadHeader:2s Write:5s Idle:20s Handler:5s} Upstream:{Host:example.com Port:443 Scheme: Endpoints:[127.0.0.1 127.0.1.2:443] InsecureBridge:false HTTP2HTTPS:true RedirectStatusCode:301} GZip:false Healthcheck:true} Cache:{Host:localhost Port:6379 Password: DB:0 TTL:0 AllowedStatuses:[200 301 302] AllowedMethods:[HEAD GET]} CircuitBreaker:{FailureRate:0.5 Interval:0s Timeout:1m0s Threshold:2 MaxRequests:1} Domains:map[] Log:{TimeFormat:2006/01/02 15:04:05 Format:$host - $remote_addr - $remote_user $protocol $request_method "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $cached_status}} example_org:{Server:{Port:{HTTP:80 HTTPS:443} TLS:{Auto:false Email:[email protected] CertFile: KeyFile: Override:0xc00025e180} Timeout:{Read:5s ReadHeader:2s Write:5s Idle:20s Handler:5s} Upstream:{Host:example.org Port:443 Scheme: Endpoints:[127.0.0.1 127.0.1.2:443] InsecureBridge:false HTTP2HTTPS:true RedirectStatusCode:301} GZip:false Healthcheck:true} Cache:{Host:localhost Port:6379 Password: DB:0 TTL:0 AllowedStatuses:[200 301 302] AllowedMethods:[HEAD GET]} CircuitBreaker:{FailureRate:0.5 Interval:0s Timeout:1m0s Threshold:2 MaxRequests:1} Domains:map[] Log:{TimeFormat:2006/01/02 15:04:05 Format:$host - $remote_addr - $remote_user $protocol $request_method "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $cached_status}}] Log:{TimeFormat:2006/01/02 15:04:05 Format:$host - $remote_addr - $remote_user $protocol $request_method "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $cached_status}} 
    INFO[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/server/logger/log.go:74 github.com/fabiocicerchia/go-proxy-cache/server/logger.LogSetup() Server will run on: 80 and 443               
    INFO[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/server/logger/log.go:75 github.com/fabiocicerchia/go-proxy-cache/server/logger.LogSetup() Redirecting to url: *:// -> [127.0.0.1 127.0.1.2:443] 
    FATA[2021/08/24 20:18:02]/go/src/github.com/fabiocicerchia/go-proxy-cache/server/tls/tls.go:35 github.com/fabiocicerchia/go-proxy-cache/server/tls.ServerOverrides() open : no such file or directory
    

    Expected behavior The service to be able to boot correctly.

    Additional context From the debug information, I suspect it's something with the TLS settings, so I have tried to set the TLS auto to true, but that did not change anything.

  • Bump golang from 1.16.3-alpine3.12 to 1.16.4-alpine3.12

    Bump golang from 1.16.3-alpine3.12 to 1.16.4-alpine3.12

    Bumps golang from 1.16.3-alpine3.12 to 1.16.4-alpine3.12.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump alpine from 3.13.2 to 3.13.3

    Bump alpine from 3.13.2 to 3.13.3

    Bumps alpine from 3.13.2 to 3.13.3.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump golang from 1.16.1-alpine3.12 to 1.16.2-alpine3.12

    Bump golang from 1.16.1-alpine3.12 to 1.16.2-alpine3.12

    Bumps golang from 1.16.1-alpine3.12 to 1.16.2-alpine3.12.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump alpine from 3.15.4 to 3.17.0

    build(deps): bump alpine from 3.15.4 to 3.17.0

    Bumps alpine from 3.15.4 to 3.17.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump alpine from 3.15.4 to 3.16.3

    build(deps): bump alpine from 3.15.4 to 3.16.3

    Bumps alpine from 3.15.4 to 3.16.3.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump alpine from 3.15.4 to 3.16.2

    build(deps): bump alpine from 3.15.4 to 3.16.2

    Bumps alpine from 3.15.4 to 3.16.2.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Cache Whitelist

    Cache Whitelist

    Hi, awesome project. I have been reading anywhere but cant find documentation about selective caching. Something like caching whitelist. I cant use bypass header since i cant enforce the clients to always use the use header "X-Go-Proxy-Cache-Force-Fresh", especially external/random user.

  • build(deps): bump alpine from 3.15.4 to 3.16.1

    build(deps): bump alpine from 3.15.4 to 3.16.1

    Bumps alpine from 3.15.4 to 3.16.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump alpine from 3.15.4 to 3.16.0

    build(deps): bump alpine from 3.15.4 to 3.16.0

    Bumps alpine from 3.15.4 to 3.16.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump alpine from 3.16 to 3.17

    build(deps): bump alpine from 3.16 to 3.17

    Bumps alpine from 3.16 to 3.17.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Mutual TLS

    Mutual TLS

    • https://www.prakharsrivastav.com/posts/from-http-to-https-using-go/
    • https://medium.com/rahasak/tls-mutual-authentication-with-golang-and-nginx-937f0da22a0e
A simple go program to proxy http request through a server with caching

go-http-proxy A simple go program to proxy http requests through a server with caching Usage All cli options are optional, and have the default values

Nov 21, 2021
concurrent caching proxy and decoder library for collections of PMTiles

go-pmtiles A caching proxy for the serverless PMTiles archive format. Resolves several of the limitations of PMTiles by running a minimalistic, single

Jan 2, 2023
LinkPreview.net Proxy Server with Caching

LinkPreview.net Proxy Server with Caching Description LinkPreview API/Image Proxy Server with Caching written in Go. Features: In-memory caching layer

Nov 19, 2021
A Reverse proxy written in Go

Myopia Short-sightedness where items in near eyesight are sharp but things in the background are not Configuration It's a yaml file. Here is an exampl

Nov 27, 2021
A paywall bypassing reverse proxy and DNS server written in go 🔨💵🧱

FreeNews ?? ?? ?? A paywall bypassing reverse proxy and DNS server written in go. This project is still hard work in progress. Expect stuff to just no

Dec 7, 2022
An experimental Tor-Proxy serivce written in Go using Go-proxy and Go-libtor.

tor-proxy An experimental standalone tor-proxy service built with Go, using go-proxy, go-libtor and bine. This is a simple replacement to Tor's origin

Nov 9, 2022
Dead simple reverse proxy for all your containerized needss
Dead simple reverse proxy for all your containerized needss

Whats this ? Pawxi is yet another reverse proxy designed with simplicity in mind. Born out of a certain users frustration at the complexity of setting

Oct 17, 2022
Simple edge server / reverse proxy

reproxy Reproxy is simple edge HTTP(s) sever / reverse proxy supporting various providers (docker, static, file). One or more providers supply informa

Dec 29, 2022
4chain is a simple、fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet.

4Chain What is 4chain? 4chain is a simple、fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. Using the ssh

Nov 1, 2022
Simple Reverse Proxy Load Balancer

lb - a reverse proxy load-balancing server, It implements the Weighted Round Robin Balancing algorithm

Mar 23, 2022
Simple SNI based reverse proxy

SNIProxy SNIProxy is a very simple reverse proxy server that uses TLS SNI to route to hosts (in HTTP mode it just uses the Host header). It is designe

Oct 16, 2022
Simple Minecraft Bedrock reverse proxy

BedProx [WIP] Simple Minecraft Bedrock reverse proxy Features Reverse Proxy HAProxy Protocol Support (NOT TESTED) Webhooks REST API How to use/deploy

Sep 7, 2022
A simple small reverse proxy for golang

ssrp simple small reverse proxy bash <(curl -Ls https://raw.githubusercontent.com/go-bai/ssrp/master/install.sh) cn install bash <(curl -Ls https://gh

Apr 5, 2022
Gouter: Simple development reverse proxy

Gouter: Simple development reverse proxy

Jan 15, 2022
Reverse cwmp proxy
Reverse cwmp proxy

cwmp-proxy Integration of the proxy will provide you the ability to place CPEs and ACS servers in different networks. What about if the devices are pl

Nov 15, 2022
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator

Trickster is an HTTP reverse proxy/cache for http applications and a dashboard query accelerator for time series databases. Learn more below, and chec

Jan 2, 2023
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

frp README | 中文文档 What is frp? frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it s

Jan 5, 2023
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies

Weaver - A modern HTTP Proxy with Advanced features Description Features Installation Architecture Configuration Contributing License Description Weav

Dec 24, 2022
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies

Weaver - A modern HTTP Proxy with Advanced features Description Features Installation Architecture Configuration Contributing License Description Weav

Jan 1, 2023