diff --git a/doc/configuration.txt b/doc/configuration.txt index 55ea43888..3949764cb 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -857,8 +857,9 @@ balance url_param [check_post []] balance uri [len ] [depth ] balance url_param [check_post []] - The definition of the load balancing algorithm is mandatory for a backend - and limited to one per backend. + The load balancing algorithm of a backend is set to roundrobin when no other + algorithm, mode nor option have been set. The algorithm may only be set once + for each backend. Examples : balance roundrobin diff --git a/src/cfgparse.c b/src/cfgparse.c index ec2c182bb..08fad6779 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -3146,32 +3146,33 @@ int readcfgfile(const char *file) cfgerr++; } - if (curproxy->cap & PR_CAP_BE && - ((curproxy->mode != PR_MODE_HEALTH) && - !(curproxy->options & (PR_O_TRANSP | PR_O_HTTP_PROXY)) && - !(curproxy->lbprm.algo & BE_LB_ALGO) && - (*(int *)&curproxy->dispatch_addr.sin_addr == 0))) { - Alert("parsing %s : %s '%s' has no dispatch address and is not in transparent or balance mode.\n", - file, proxy_type_str(curproxy), curproxy->id); - cfgerr++; - } - - if ((curproxy->mode != PR_MODE_HEALTH) && (curproxy->lbprm.algo & BE_LB_ALGO)) { - if (curproxy->options & PR_O_TRANSP) { - Alert("parsing %s : %s '%s' cannot use both transparent and balance mode.\n", - file, proxy_type_str(curproxy), curproxy->id); - cfgerr++; - } + if ((curproxy->cap & PR_CAP_BE) && (curproxy->mode != PR_MODE_HEALTH)) { + if (curproxy->lbprm.algo & BE_LB_ALGO) { + if (curproxy->options & PR_O_TRANSP) { + Alert("parsing %s : %s '%s' cannot use both transparent and balance mode.\n", + file, proxy_type_str(curproxy), curproxy->id); + cfgerr++; + } #ifdef WE_DONT_SUPPORT_SERVERLESS_LISTENERS - else if (curproxy->srv == NULL) { - Alert("parsing %s : %s '%s' needs at least 1 server in balance mode.\n", - file, proxy_type_str(curproxy), curproxy->id); - cfgerr++; - } + else if (curproxy->srv == NULL) { + Alert("parsing %s : %s '%s' needs at least 1 server in balance mode.\n", + file, proxy_type_str(curproxy), curproxy->id); + cfgerr++; + } #endif - else if (*(int *)&curproxy->dispatch_addr.sin_addr != 0) { - Warning("parsing %s : dispatch address of %s '%s' will be ignored in balance mode.\n", - file, proxy_type_str(curproxy), curproxy->id); + else if (*(int *)&curproxy->dispatch_addr.sin_addr != 0) { + Warning("parsing %s : dispatch address of %s '%s' will be ignored in balance mode.\n", + file, proxy_type_str(curproxy), curproxy->id); + } + } + else if (!(curproxy->options & (PR_O_TRANSP | PR_O_HTTP_PROXY)) && + (*(int *)&curproxy->dispatch_addr.sin_addr == 0)) { + /* If no LB algo is set in a backend, and we're not in + * transparent mode, dispatch mode nor proxy mode, we + * want to use balance roundrobin by default. + */ + curproxy->lbprm.algo &= ~BE_LB_ALGO; + curproxy->lbprm.algo |= BE_LB_ALGO_RR; } }