From 51a8e4a6b358833c95e96dddf5805f1397fa11f6 Mon Sep 17 00:00:00 2001 From: mikemherron <15673068+mikemherron@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:14:30 +0000 Subject: [PATCH] Proxy middleware docs update --- website/content/middleware/proxy.md | 85 ++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/website/content/middleware/proxy.md b/website/content/middleware/proxy.md index 404e1fce..c4045fce 100644 --- a/website/content/middleware/proxy.md +++ b/website/content/middleware/proxy.md @@ -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: @@ -77,6 +109,7 @@ Default Configuration: | ---------- | -------------- | | Skipper | DefaultSkipper | | ContextKey | `target` | +| RetryCount | 0 | ### Regex-based Rules