diff --git a/doc/configuration.txt b/doc/configuration.txt
index 5a815a1..5345b33 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -10184,6 +10184,12 @@
     weight is reported on the stats page as "DRAIN" since it has the same
     effect on the server (it's removed from the LB farm).
 
+  - The string "maxconn:" followed by an integer (no space between). Values in
+    this format will set the maxconn of a server. The maximum number of
+    connections advertised needs to be multipled by the number of load balancers
+    and different backends that use this health check to get the total number
+    of connections the server might receive. Example: maxconn:30
+
   - The word "ready". This will turn the server's administrative state to the
     READY mode, thus cancelling any DRAIN or MAINT state
 
diff --git a/include/proto/server.h b/include/proto/server.h
index 872503c..ee45f63 100644
--- a/include/proto/server.h
+++ b/include/proto/server.h
@@ -113,6 +113,13 @@
                                              const char *addr_str, const char *updater);
 
 /*
+ * Parses maxconn_str and configures sv accordingly.
+ * Returns NULL on success, error message string otherwise.
+ */
+const char *server_parse_maxconn_change_request(struct server *sv,
+					       const char *maxconn_str);
+
+/*
  * Return true if the server has a zero user-weight, meaning it's in draining
  * mode (ie: not taking new non-persistent connections).
  */
diff --git a/src/checks.c b/src/checks.c
index 35fd020..c4ac947 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -938,6 +938,7 @@
 		const char *hs = NULL; /* health status      */
 		const char *as = NULL; /* admin status */
 		const char *ps = NULL; /* performance status */
+		const char *cs = NULL; /* maxconn */
 		const char *err = NULL; /* first error to report */
 		const char *wrn = NULL; /* first warning to report */
 		char *cmd, *p;
@@ -1039,10 +1040,14 @@
 			else if (strcasecmp(cmd, "maint") == 0) {
 				as = cmd;
 			}
-			/* else try to parse a weight here and keep the last one */
+			/* try to parse a weight here and keep the last one */
 			else if (isdigit((unsigned char)*cmd) && strchr(cmd, '%') != NULL) {
 				ps = cmd;
 			}
+			/* try to parse a maxconn here */
+			else if (strncasecmp(cmd, "maxconn:", strlen("maxconn:")) == 0) {
+				cs = cmd;
+			}
 			else {
 				/* keep a copy of the first error */
 				if (!err)
@@ -1079,6 +1084,16 @@
 				wrn = msg;
 		}
 
+		if (cs) {
+			const char *msg;
+
+			cs += strlen("maxconn:");
+
+			msg = server_parse_maxconn_change_request(s, cs);
+			if (!wrn || !*wrn)
+				wrn = msg;
+		}
+
 		/* and finally health status */
 		if (hs) {
 			/* We'll report some of the warnings and errors we have
diff --git a/src/server.c b/src/server.c
index 5a2c58a..1095754 100644
--- a/src/server.c
+++ b/src/server.c
@@ -831,6 +831,33 @@
 	return "Could not understand IP address format.\n";
 }
 
+const char *server_parse_maxconn_change_request(struct server *sv,
+                                                const char *maxconn_str)
+{
+	long int v;
+	char *end;
+
+	if (!*maxconn_str)
+		return "Require <maxconn>.\n";
+
+	v = strtol(maxconn_str, &end, 10);
+	if (end == maxconn_str)
+		return "maxconn string empty or preceded by garbage";
+	else if (end[0] != '\0')
+		return "Trailing garbage in maxconn string";
+
+	if (sv->maxconn == sv->minconn) { // static maxconn
+		sv->maxconn = sv->minconn = v;
+	} else { // dynamic maxconn
+		sv->maxconn = v;
+	}
+
+	if (may_dequeue_tasks(sv, sv->proxy))
+		process_srv_queue(sv);
+
+	return NULL;
+}
+
 int parse_server(const char *file, int linenum, char **args, struct proxy *curproxy, struct proxy *defproxy)
 {
 	struct server *newsrv = NULL;
