diff --git a/www/caddy/pkg-descr b/www/caddy/pkg-descr
index 59d58f317..9a3d7175c 100644
--- a/www/caddy/pkg-descr
+++ b/www/caddy/pkg-descr
@@ -32,7 +32,7 @@ Plugin Changelog
* Add: forward_auth directive with Authelia as Authz Provider.
* Add: Default HTTP and HTTPS ports can be changed in general settings.
* Add: Introduce HTTP version to handler. HTTP/1.1, HTTP/2 and HTTP/3 can be chosen.
-* Change: NTLM is now deprecated, though the option will stay for a while longer.
+* Add: HTTP Keepalive can be set in a handler.
* Change: Option "tls_trusted_ca_certs" is now "tls_trust_pool".
1.5.7
diff --git a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml
index e8013cd00..f467f6576 100644
--- a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml
+++ b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml
@@ -87,17 +87,30 @@
true
-
- header
-
- true
-
handle.PassiveHealthFailDuration
text
+
+ header
+
+ true
+
+
+ handle.HttpVersion
+
+ dropdown
+
+
+
+ handle.HttpKeepalive
+
+ text
+ 120
+
+
header
@@ -109,18 +122,11 @@
checkbox
-
- handle.HttpVersion
-
- dropdown
-
-
handle.HttpNtlm
checkbox
-
- true
+
handle.HttpTlsInsecureSkipVerify
diff --git a/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml b/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
index b44276dc2..e00c0efb6 100644
--- a/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
+++ b/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
@@ -335,6 +335,10 @@
HTTP/3
+
+ 0
+ 86400
+
diff --git a/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt b/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt
index 41622bac3..9da4e4596 100644
--- a/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt
+++ b/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt
@@ -337,6 +337,7 @@
| {{ lang._('Forward Auth') }} |
{{ lang._('TLS') }} |
{{ lang._('HTTP Version') }} |
+ {{ lang._('HTTP Keepalive') }} |
{{ lang._('TLS CA') }} |
{{ lang._('TLS Server Name') }} |
{{ lang._('NTLM') }} |
diff --git a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
index 592f552d5..3dac6c0ab 100644
--- a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
+++ b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
@@ -355,6 +355,7 @@
# - HttpTlsServerName (string, optional): Specifies the server name for the TLS handshake.
# - PassiveHealthFailDuration (integer, optional): Enables passive health checks when set > 0.
# - HttpVersion (string, optional): Choose HTTP version. Empty (default) is 1.1 and 2.
+# - HttpKeepalive (string, optional): Keeaplive is either off (0) or a value. Empty (default) 120s.
#}
{% macro reverse_proxy_configuration(handle) %}
{{ handle.HandleType }} {{ handle.HandlePath|default("") }} {
@@ -374,7 +375,7 @@
{% if handle.PassiveHealthFailDuration|default("") %}
fail_duration {{ handle.PassiveHealthFailDuration }}s
{% endif %}
- {% if handle.HttpTls|default("0") == "1" or handle.HttpTlsInsecureSkipVerify|default("0") == "1" or handle.HttpTlsTrustedCaCerts or handle.HttpTlsServerName or handle.HttpVersion %}
+ {% if handle.HttpTls|default("0") == "1" or handle.HttpTlsInsecureSkipVerify|default("0") == "1" or handle.HttpTlsTrustedCaCerts or handle.HttpTlsServerName or handle.HttpVersion or handle.HttpKeepalive %}
{% if handle.HttpNtlm|default("0") == "1" %}
transport http_ntlm {
{% if handle.HttpTls|default("0") == "1" %}
@@ -397,6 +398,13 @@
{% if handle.HttpVersion %}
versions {{ version_map[handle.HttpVersion] }}
{% endif %}
+ {% if handle.HttpKeepalive %}
+ {% if handle.HttpKeepalive == "0" %}
+ keepalive off
+ {% else %}
+ keepalive {{ handle.HttpKeepalive }}s
+ {% endif %}
+ {% endif %}
{% if handle.HttpTls|default("0") == "1" %}
tls
{% endif %}
diff --git a/www/caddy/src/opnsense/www/js/widgets/CaddyCertificate.js b/www/caddy/src/opnsense/www/js/widgets/CaddyCertificate.js
index e06511117..24b45f44f 100644
--- a/www/caddy/src/opnsense/www/js/widgets/CaddyCertificate.js
+++ b/www/caddy/src/opnsense/www/js/widgets/CaddyCertificate.js
@@ -30,7 +30,7 @@ export default class CaddyCertificate extends BaseTableWidget {
constructor() {
super();
this.resizeHandles = "e, w";
- this.tickTimeout = 30000;
+ this.tickTimeout = 30;
}
getGridOptions() {
@@ -51,26 +51,22 @@ export default class CaddyCertificate extends BaseTableWidget {
}
async onWidgetTick() {
- try {
- // Check if Caddy is enabled
- const caddyStatus = await ajaxGet('/api/caddy/reverse_proxy/get', {});
- if (!caddyStatus.caddy.general || caddyStatus.caddy.general.enabled === "0") {
- this.displayError(`${this.translations.unconfigured}`);
- return;
- }
-
- // Fetch the certificate details
- const response = await ajaxGet('/api/caddy/diagnostics/certificate', {});
- if (response.status !== "success") {
- this.displayError(`${this.translations.nocerts}`);
- return;
- }
-
- // Process certificates if the response is successful
- this.processCertificates(response.content);
- } catch (error) {
- this.displayError(`${this.translations.error}`);
+ // Check if Caddy is enabled
+ const caddyStatus = await this.ajaxGet('/api/caddy/reverse_proxy/get');
+ if (!caddyStatus.caddy.general || caddyStatus.caddy.general.enabled === "0") {
+ this.displayError(`${this.translations.unconfigured}`);
+ return;
}
+
+ // Fetch the certificate details
+ const response = await this.ajaxGet('/api/caddy/diagnostics/certificate');
+ if (response.status !== "success") {
+ this.displayError(`${this.translations.nocerts}`);
+ return;
+ }
+
+ // Process certificates if the response is successful
+ this.processCertificates(response.content);
}
// Utility function to display errors within the widget
diff --git a/www/caddy/src/opnsense/www/js/widgets/CaddyDomain.js b/www/caddy/src/opnsense/www/js/widgets/CaddyDomain.js
index 04eca5ad1..552c6a195 100644
--- a/www/caddy/src/opnsense/www/js/widgets/CaddyDomain.js
+++ b/www/caddy/src/opnsense/www/js/widgets/CaddyDomain.js
@@ -50,21 +50,16 @@ export default class CaddyDomain extends BaseTableWidget {
}
async onWidgetTick() {
- try {
- // Check if caddy is enabled
- const data = await ajaxGet('/api/caddy/reverse_proxy/get', {});
- if (!data.caddy.general || data.caddy.general.enabled === "0") {
- this.displayError(`${this.translations.unconfigured}`);
- return;
- }
-
- // Process domains if caddy is enabled
- let domains = { ...data.caddy.reverseproxy.reverse, ...data.caddy.reverseproxy.subdomain };
- this.processDomains(domains);
-
- } catch (error) {
- this.displayError(`${this.translations.error}`);
+ // Check if caddy is enabled
+ const data = await this.ajaxGet('/api/caddy/reverse_proxy/get');
+ if (!data.caddy.general || data.caddy.general.enabled === "0") {
+ this.displayError(`${this.translations.unconfigured}`);
+ return;
}
+
+ // Process domains if caddy is enabled
+ let domains = { ...data.caddy.reverseproxy.reverse, ...data.caddy.reverseproxy.subdomain };
+ this.processDomains(domains);
}
// Utility function to display errors within the widget