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 d5c98e31a..3cd8b81bb 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
@@ -307,6 +307,13 @@
true
+
+ backend.tuning_caching
+
+ checkbox
+
+ true
+
header
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
index 87acdf10d..8d0e5ad79 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
@@ -318,5 +318,25 @@
true
+
+
+ haproxy.general.cache.enabled
+
+ checkbox
+
+
+
+ haproxy.general.cache.totalMaxSize
+
+ text
+
+
+
+ haproxy.general.cache.maxAge
+
+ text
+
+
+
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 296262e91..31189c553 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
@@ -324,6 +324,26 @@
N
+
+
+ 0
+ N
+
+
+ 1
+ 4095
+ 4
+ Y
+ Please specify a value between 1 and 4095.
+
+
+ 1
+ 3600
+ 60
+ N
+ Please specify a value between 1 and 3600.
+
+
@@ -976,6 +996,10 @@
Always
+
+ 0
+ N
+
diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/Menu/Menu.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/Menu/Menu.xml
index 8e11c33d5..b91122f5d 100644
--- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/Menu/Menu.xml
+++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/Menu/Menu.xml
@@ -8,6 +8,7 @@
+
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 9332ba734..39893f123 100644
--- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
+++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
@@ -872,6 +872,20 @@ global
{% endfor %}
{%- endif -%}
+{# ############################### #}
+{# CACHE #}
+{# ############################### #}
+
+{%- if helpers.exists('OPNsense.HAProxy.general.cache') and OPNsense.HAProxy.general.cache.enabled|default("") == "1" %}
+cache opnsense-haproxy-cache
+{% if OPNsense.HAProxy.general.cache.totalMaxSize|default("") != "" %}
+ total-max-size {{OPNsense.HAProxy.general.cache.totalMaxSize}}
+{% endif %}
+{% if OPNsense.HAProxy.general.cache.maxAge|default("") != "" %}
+ max-age {{OPNsense.HAProxy.general.cache.maxAge}}
+{% endif %}
+{%- endif -%}
+
{# ############################### #}
{# DEFAULTS #}
{# ############################### #}
@@ -1290,6 +1304,10 @@ backend {{backend.name}}
{% if backend.tuning_httpreuse|default("") != "" and backend.mode == "http" %}
http-reuse {{backend.tuning_httpreuse}}
{% endif %}
+{% if helpers.exists('OPNsense.HAProxy.general.cache') and OPNsense.HAProxy.general.cache.enabled|default("") == "1" and if backend.tuning_caching|default("") == "1" and backend.mode == "http" %}
+ http-request cache-use opnsense-haproxy-cache
+ http-response cache-store opnsense-haproxy-cache
+{% endif %}
{% if backend.tuning_defaultserver|default("") != "" %}
default-server {{backend.tuning_defaultserver}}
{% endif %}