diff --git a/net/haproxy/pkg-descr b/net/haproxy/pkg-descr
index e0f6044fe..056cc01d9 100644
--- a/net/haproxy/pkg-descr
+++ b/net/haproxy/pkg-descr
@@ -8,6 +8,7 @@ Plugin Changelog
Added:
* add support for built-in OCSP update feature
+* add support for forwarded header (RFC7239)
Fixed:
* fix typo in cert sync script
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml
index c7babd3a7..5895c1013 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml
@@ -173,6 +173,21 @@
true
+
+ backend.forwardedHeader
+
+ checkbox
+
+
+
+ backend.forwardedHeaderParameters
+
+ select_multiple
+
+ true
+ true
+ HAProxy documentation for a full description.]]>
+
header
diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
index 5c42f7c20..c4eff76bc 100644
--- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
+++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
@@ -1053,6 +1053,23 @@
HTTP/1.0
+
+ 0
+ N
+
+
+ N
+ Y
+ Y
+
+ proto
+ host
+ by
+ by_port
+ for
+ for_port
+
+
N
sticktable
diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
index bcfc4c6e2..19b5c50ea 100644
--- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
+++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
@@ -1686,6 +1686,15 @@ backend {{backend.name}}
{% if backend.tuning_httpreuse|default("") != "" and backend.mode == "http" %}
http-reuse {{backend.tuning_httpreuse}}
{% endif %}
+{% if backend.forwardedHeader == '1' and backend.mode == 'http' %}
+{% set forwarded_params = [] %}
+{% if backend.forwardedHeaderParameters|default("") != "" %}
+{% for fwd_param in backend.forwardedHeaderParameters.split(",") %}
+{% do forwarded_params.append(fwd_param) %}
+{% endfor %}
+{% endif %}
+ option forwarded {{forwarded_params|join(' ')}}
+{% endif %}
{% if helpers.exists('OPNsense.HAProxy.general.cache') and OPNsense.HAProxy.general.cache.enabled|default("") == "1" and backend.tuning_caching|default("") == "1" and backend.mode == "http" %}
http-request cache-use opnsense-haproxy-cache
http-response cache-store opnsense-haproxy-cache