mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-29 06:40:59 +01:00
MEDIUM: http: add the "set-nice" action to http-request and http-response
This new action changes the nice factor of the task processing the current request.
This commit is contained in:
parent
e365c0b92b
commit
f4c43c13be
@ -2668,7 +2668,8 @@ http-check send-state
|
|||||||
See also : "option httpchk", "http-check disable-on-404"
|
See also : "option httpchk", "http-check disable-on-404"
|
||||||
|
|
||||||
http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
|
http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
|
||||||
add-header <name> <fmt> | set-header <name> <fmt> }
|
add-header <name> <fmt> | set-header <name> <fmt> |
|
||||||
|
set-nice <nice> }
|
||||||
[ { if | unless } <condition> ]
|
[ { if | unless } <condition> ]
|
||||||
Access control for Layer 7 requests
|
Access control for Layer 7 requests
|
||||||
|
|
||||||
@ -2726,6 +2727,15 @@ http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
|
|||||||
information to the server, where the header must not be manipulated by
|
information to the server, where the header must not be manipulated by
|
||||||
external users.
|
external users.
|
||||||
|
|
||||||
|
- "set-nice" sets the "nice" factor of the current request being processed.
|
||||||
|
It only has effect against the other requests being processed at the same
|
||||||
|
time. The default value is 0, unless altered by the "nice" setting on the
|
||||||
|
"bind" line. The accepted range is -1024..1024. The higher the value, the
|
||||||
|
nicest the request will be. Lower values will make the request more
|
||||||
|
important than other ones. This can be useful to improve the speed of
|
||||||
|
some requests, or lower the priority of non-important requests. Using
|
||||||
|
this setting without prior experimentation can cause some major slowdown.
|
||||||
|
|
||||||
There is no limit to the number of http-request statements per instance.
|
There is no limit to the number of http-request statements per instance.
|
||||||
|
|
||||||
It is important to know that http-request rules are processed very early in
|
It is important to know that http-request rules are processed very early in
|
||||||
@ -2761,7 +2771,7 @@ http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
|
|||||||
See also : "stats http-request", section 3.4 about userlists and section 7
|
See also : "stats http-request", section 3.4 about userlists and section 7
|
||||||
about ACL usage.
|
about ACL usage.
|
||||||
|
|
||||||
http-response { allow | deny | add-header <name> <fmt> |
|
http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
|
||||||
set-header <name> <fmt> } [ { if | unless } <condition> ]
|
set-header <name> <fmt> } [ { if | unless } <condition> ]
|
||||||
Access control for Layer 7 responses
|
Access control for Layer 7 responses
|
||||||
|
|
||||||
@ -2797,6 +2807,15 @@ http-response { allow | deny | add-header <name> <fmt> |
|
|||||||
information to the server, where the header must not be manipulated by
|
information to the server, where the header must not be manipulated by
|
||||||
external users.
|
external users.
|
||||||
|
|
||||||
|
- "set-nice" sets the "nice" factor of the current request being processed.
|
||||||
|
It only has effect against the other requests being processed at the same
|
||||||
|
time. The default value is 0, unless altered by the "nice" setting on the
|
||||||
|
"bind" line. The accepted range is -1024..1024. The higher the value, the
|
||||||
|
nicest the request will be. Lower values will make the request more
|
||||||
|
important than other ones. This can be useful to improve the speed of
|
||||||
|
some requests, or lower the priority of non-important requests. Using
|
||||||
|
this setting without prior experimentation can cause some major slowdown.
|
||||||
|
|
||||||
There is no limit to the number of http-response statements per instance.
|
There is no limit to the number of http-response statements per instance.
|
||||||
|
|
||||||
It is important to know that http-reqsponse rules are processed very early in
|
It is important to know that http-reqsponse rules are processed very early in
|
||||||
|
|||||||
@ -246,6 +246,7 @@ enum {
|
|||||||
HTTP_REQ_ACT_ADD_HDR,
|
HTTP_REQ_ACT_ADD_HDR,
|
||||||
HTTP_REQ_ACT_SET_HDR,
|
HTTP_REQ_ACT_SET_HDR,
|
||||||
HTTP_REQ_ACT_REDIR,
|
HTTP_REQ_ACT_REDIR,
|
||||||
|
HTTP_REQ_ACT_SET_NICE,
|
||||||
HTTP_REQ_ACT_MAX /* must always be last */
|
HTTP_REQ_ACT_MAX /* must always be last */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -256,6 +257,7 @@ enum {
|
|||||||
HTTP_RES_ACT_DENY,
|
HTTP_RES_ACT_DENY,
|
||||||
HTTP_RES_ACT_ADD_HDR,
|
HTTP_RES_ACT_ADD_HDR,
|
||||||
HTTP_RES_ACT_SET_HDR,
|
HTTP_RES_ACT_SET_HDR,
|
||||||
|
HTTP_RES_ACT_SET_NICE,
|
||||||
HTTP_RES_ACT_MAX /* must always be last */
|
HTTP_RES_ACT_MAX /* must always be last */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -368,6 +370,7 @@ struct http_req_rule {
|
|||||||
struct list fmt; /* log-format compatible expression */
|
struct list fmt; /* log-format compatible expression */
|
||||||
} hdr_add; /* args used by "add-header" and "set-header" */
|
} hdr_add; /* args used by "add-header" and "set-header" */
|
||||||
struct redirect_rule *redir; /* redirect rule or "http-request redirect" */
|
struct redirect_rule *redir; /* redirect rule or "http-request redirect" */
|
||||||
|
int nice; /* nice value for HTTP_REQ_ACT_SET_NICE */
|
||||||
} arg; /* arguments used by some actions */
|
} arg; /* arguments used by some actions */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -381,6 +384,7 @@ struct http_res_rule {
|
|||||||
int name_len; /* header name's length */
|
int name_len; /* header name's length */
|
||||||
struct list fmt; /* log-format compatible expression */
|
struct list fmt; /* log-format compatible expression */
|
||||||
} hdr_add; /* args used by "add-header" and "set-header" */
|
} hdr_add; /* args used by "add-header" and "set-header" */
|
||||||
|
int nice; /* nice value for HTTP_RES_ACT_SET_NICE */
|
||||||
} arg; /* arguments used by some actions */
|
} arg; /* arguments used by some actions */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -3206,6 +3206,10 @@ http_req_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
|||||||
case HTTP_REQ_ACT_REDIR:
|
case HTTP_REQ_ACT_REDIR:
|
||||||
return rule;
|
return rule;
|
||||||
|
|
||||||
|
case HTTP_REQ_ACT_SET_NICE:
|
||||||
|
s->task->nice = rule->arg.nice;
|
||||||
|
break;
|
||||||
|
|
||||||
case HTTP_REQ_ACT_SET_HDR:
|
case HTTP_REQ_ACT_SET_HDR:
|
||||||
ctx.idx = 0;
|
ctx.idx = 0;
|
||||||
/* remove all occurrences of the header */
|
/* remove all occurrences of the header */
|
||||||
@ -3271,6 +3275,10 @@ http_res_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
|||||||
txn->flags |= TX_SVDENY;
|
txn->flags |= TX_SVDENY;
|
||||||
return rule;
|
return rule;
|
||||||
|
|
||||||
|
case HTTP_RES_ACT_SET_NICE:
|
||||||
|
s->task->nice = rule->arg.nice;
|
||||||
|
break;
|
||||||
|
|
||||||
case HTTP_RES_ACT_SET_HDR:
|
case HTTP_RES_ACT_SET_HDR:
|
||||||
ctx.idx = 0;
|
ctx.idx = 0;
|
||||||
/* remove all occurrences of the header */
|
/* remove all occurrences of the header */
|
||||||
@ -8386,6 +8394,22 @@ struct http_req_rule *parse_http_req_cond(const char **args, const char *file, i
|
|||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (!strcmp(args[0], "set-nice")) {
|
||||||
|
rule->action = HTTP_REQ_ACT_SET_NICE;
|
||||||
|
cur_arg = 1;
|
||||||
|
|
||||||
|
if (!*args[cur_arg] ||
|
||||||
|
(*args[cur_arg + 1] && strcmp(args[cur_arg + 1], "if") != 0 && strcmp(args[cur_arg + 1], "unless") != 0)) {
|
||||||
|
Alert("parsing [%s:%d]: 'http-request %s' expects exactly 1 argument (integer value).\n",
|
||||||
|
file, linenum, args[0]);
|
||||||
|
goto out_err;
|
||||||
|
}
|
||||||
|
rule->arg.nice = atoi(args[cur_arg]);
|
||||||
|
if (rule->arg.nice < -1024)
|
||||||
|
rule->arg.nice = -1024;
|
||||||
|
else if (rule->arg.nice > 1024)
|
||||||
|
rule->arg.nice = 1024;
|
||||||
|
cur_arg++;
|
||||||
} else if (strcmp(args[0], "add-header") == 0 || strcmp(args[0], "set-header") == 0) {
|
} else if (strcmp(args[0], "add-header") == 0 || strcmp(args[0], "set-header") == 0) {
|
||||||
rule->action = *args[0] == 'a' ? HTTP_REQ_ACT_ADD_HDR : HTTP_REQ_ACT_SET_HDR;
|
rule->action = *args[0] == 'a' ? HTTP_REQ_ACT_ADD_HDR : HTTP_REQ_ACT_SET_HDR;
|
||||||
cur_arg = 1;
|
cur_arg = 1;
|
||||||
@ -8425,7 +8449,7 @@ struct http_req_rule *parse_http_req_cond(const char **args, const char *file, i
|
|||||||
cur_arg = 2;
|
cur_arg = 2;
|
||||||
return rule;
|
return rule;
|
||||||
} else {
|
} else {
|
||||||
Alert("parsing [%s:%d]: 'http-request' expects 'allow', 'deny', 'auth', 'redirect', 'tarpit', 'add-header', 'set-header', but got '%s'%s.\n",
|
Alert("parsing [%s:%d]: 'http-request' expects 'allow', 'deny', 'auth', 'redirect', 'tarpit', 'add-header', 'set-header', 'set-nice', but got '%s'%s.\n",
|
||||||
file, linenum, args[0], *args[0] ? "" : " (missing argument)");
|
file, linenum, args[0], *args[0] ? "" : " (missing argument)");
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
@ -8473,6 +8497,22 @@ struct http_res_rule *parse_http_res_cond(const char **args, const char *file, i
|
|||||||
} else if (!strcmp(args[0], "deny")) {
|
} else if (!strcmp(args[0], "deny")) {
|
||||||
rule->action = HTTP_RES_ACT_DENY;
|
rule->action = HTTP_RES_ACT_DENY;
|
||||||
cur_arg = 1;
|
cur_arg = 1;
|
||||||
|
} else if (!strcmp(args[0], "set-nice")) {
|
||||||
|
rule->action = HTTP_RES_ACT_SET_NICE;
|
||||||
|
cur_arg = 1;
|
||||||
|
|
||||||
|
if (!*args[cur_arg] ||
|
||||||
|
(*args[cur_arg + 1] && strcmp(args[cur_arg + 1], "if") != 0 && strcmp(args[cur_arg + 1], "unless") != 0)) {
|
||||||
|
Alert("parsing [%s:%d]: 'http-response %s' expects exactly 1 argument (integer value).\n",
|
||||||
|
file, linenum, args[0]);
|
||||||
|
goto out_err;
|
||||||
|
}
|
||||||
|
rule->arg.nice = atoi(args[cur_arg]);
|
||||||
|
if (rule->arg.nice < -1024)
|
||||||
|
rule->arg.nice = -1024;
|
||||||
|
else if (rule->arg.nice > 1024)
|
||||||
|
rule->arg.nice = 1024;
|
||||||
|
cur_arg++;
|
||||||
} else if (strcmp(args[0], "add-header") == 0 || strcmp(args[0], "set-header") == 0) {
|
} else if (strcmp(args[0], "add-header") == 0 || strcmp(args[0], "set-header") == 0) {
|
||||||
rule->action = *args[0] == 'a' ? HTTP_RES_ACT_ADD_HDR : HTTP_RES_ACT_SET_HDR;
|
rule->action = *args[0] == 'a' ? HTTP_RES_ACT_ADD_HDR : HTTP_RES_ACT_SET_HDR;
|
||||||
cur_arg = 1;
|
cur_arg = 1;
|
||||||
@ -8493,7 +8533,7 @@ struct http_res_rule *parse_http_res_cond(const char **args, const char *file, i
|
|||||||
(proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR);
|
(proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR);
|
||||||
cur_arg += 2;
|
cur_arg += 2;
|
||||||
} else {
|
} else {
|
||||||
Alert("parsing [%s:%d]: 'http-response' expects 'allow', 'deny', 'redirect', 'add-header', 'set-header', but got '%s'%s.\n",
|
Alert("parsing [%s:%d]: 'http-response' expects 'allow', 'deny', 'redirect', 'add-header', 'set-header', 'set-nice', but got '%s'%s.\n",
|
||||||
file, linenum, args[0], *args[0] ? "" : " (missing argument)");
|
file, linenum, args[0], *args[0] ? "" : " (missing argument)");
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user