diff --git a/x-forwarded-for/README.md b/x-forwarded-for/README.md index 90af23e..ef27e11 100644 --- a/x-forwarded-for/README.md +++ b/x-forwarded-for/README.md @@ -19,4 +19,5 @@ Configuration ID: `xforwardedfor` | enableUpstream | boolean | Enable adding XFF headers or header values in forwarded requests. Note that any existing XFF header values will still be forwarded if this is `false`. | no | `true` | | forwardHeader | boolean | Enable forwarding an existing XFF and XFP header value in a request. | no | `true` | | enableForwardProto | boolean | Enable adding a XFP header in forwarded requests. | no | `true` | +| allowForwardProtoMultiple | boolean | If `true`, new values of `x-forwarded-proto` will be added to previous values (forming a list); this may not be supported by all servers. Otherwise, the header is overwritten with the newest value. To retain a previous value, set `enableForwardProto` to `false` instead. | no | `true` | diff --git a/x-forwarded-for/main/java/org/omegazero/proxyplugin/xforwardedfor/XForwardedForPlugin.java b/x-forwarded-for/main/java/org/omegazero/proxyplugin/xforwardedfor/XForwardedForPlugin.java index b7b6e6d..20fba16 100644 --- a/x-forwarded-for/main/java/org/omegazero/proxyplugin/xforwardedfor/XForwardedForPlugin.java +++ b/x-forwarded-for/main/java/org/omegazero/proxyplugin/xforwardedfor/XForwardedForPlugin.java @@ -57,6 +57,8 @@ public class XForwardedForPlugin { private boolean forwardHeader = true; @ConfigurationOption private boolean enableForwardProto = true; + @ConfigurationOption + private boolean allowForwardProtoMultiple = true; private Object[] expectedParts; @@ -100,8 +102,12 @@ public class XForwardedForPlugin { } if(this.enableUpstream) http.appendHeader(HEADER_XFF, addressToString((InetSocketAddress) downstreamConnection.getRemoteAddress(), this.includePortNumber)); - if(this.enableForwardProto) - http.appendHeader(HEADER_XFP, http.getScheme()); + if(this.enableForwardProto){ + if(this.allowForwardProtoMultiple) + http.appendHeader(HEADER_XFP, http.getScheme()); + else + http.setHeader(HEADER_XFP, http.getScheme()); + } }