Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proxy middleware docs update to include retry config #281

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 59 additions & 26 deletions website/content/middleware/proxy.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,32 +43,64 @@ e.Use(middleware.ProxyWithConfig(middleware.ProxyConfig{}))

```go
// ProxyConfig defines the config for Proxy middleware.
ProxyConfig struct {
// Skipper defines a function to skip middleware.
Skipper Skipper

// Balancer defines a load balancing technique.
// Required.
Balancer ProxyBalancer

// Rewrite defines URL path rewrite rules. The values captured in asterisk can be
// retrieved by index e.g. $1, $2 and so on.
Rewrite map[string]string

// RegexRewrite defines rewrite rules using regexp.Rexexp with captures
// Every capture group in the values can be retrieved by index e.g. $1, $2 and so on.
RegexRewrite map[*regexp.Regexp]string

// Context key to store selected ProxyTarget into context.
// Optional. Default value "target".
ContextKey string

// To customize the transport to remote.
// Examples: If custom TLS certificates are required.
Transport http.RoundTripper

// ModifyResponse defines function to modify response from ProxyTarget.
ModifyResponse func(*http.Response) error
ProxyConfig struct {

// Skipper defines a function to skip middleware.
Skipper Skipper

// Balancer defines a load balancing technique.
// Required.
Balancer ProxyBalancer

// RetryCount defines the number of times a failed proxied request should be
// retried using the next available ProxyTarget. Defaults to 0, meaning
// requests are never retried.
RetryCount int

// RetryFilter defines a function used to determine if a failed request to a
// ProxyTarget should be retried. The RetryFilter will only be called when the
// number of previous retries is less than RetryCount. If the function returns
// true, the request will be retried. The provided error indicates the reason
// for the request failure. When the ProxyTarget is unavailable, the error will
// be an instance of echo.HTTPError with a Code of http.StatusBadGateway. In all
// other cases, the error will indicate an internal error in the Proxy middleware.
// When a RetryFilter is not specified, all requests that fail with
// http.StatusBadGateway will be retried. A custom RetryFilter can be provided to
// only retry specific requests. Note that RetryFilter is only called when the
// request to the target fails, or an internal error in the Proxy middleware has
// occurred. Successful requests that return a non-200 response code cannot be
// retried.
RetryFilter func(c echo.Context, e error) bool

// ErrorHandler defines a function which can be used to return custom errors from
// the Proxy middleware. ErrorHandler is only invoked when there has been either
// an internal error in the Proxy middleware or the ProxyTarget is unavailable.
// Due to the way requests are proxied, ErrorHandler is not invoked when a
// ProxyTarget returns a non-200 response. In these cases, the response is already
// written so errors cannot be modified. ErrorHandler is only invoked after all
// retry attempts have been exhausted.
ErrorHandler func(c echo.Context, err error) error

// Rewrite defines URL path rewrite rules. The values captured in asterisk can be
// retrieved by index e.g. $1, $2 and so on.
Rewrite map[string]string

// RegexRewrite defines rewrite rules using regexp.Rexexp with captures
// Every capture group in the values can be retrieved by index e.g. $1, $2 and
// so on.
RegexRewrite map[*regexp.Regexp]string

// Context key to store selected ProxyTarget into context.
// Optional. Default value "target".
ContextKey string

// To customize the transport to remote.
// Examples: If custom TLS certificates are required.
Transport http.RoundTripper

// ModifyResponse defines function to modify response from ProxyTarget.
ModifyResponse func(*http.Response) error
}
```

Default Configuration:
Expand All @@ -77,6 +109,7 @@ Default Configuration:
| ---------- | -------------- |
| Skipper | DefaultSkipper |
| ContextKey | `target` |
| RetryCount | 0 |

### Regex-based Rules

Expand Down