MEDIUM: config: set tune.maxrewrite to 1024 by default
The tune.maxrewrite parameter used to be pre-initialized to half of the buffer size since the very early days when buffers were very small. It has grown to absurdly large values over the years to reach 8kB for a 16kB buffer. This prevents large requests from being accepted, which is the opposite of the initial goal. Many users fix it to 1024 which is already quite large for header addition. So let's change the default setting policy : - pre-initialize it to 1024 - let the user tweak it - in any case, limit it to tune.bufsize / 2 This results in 15kB usable to buffer HTTP messages instead of 8kB, and doesn't affect existing configurations which already force it.
This commit is contained in:
parent
9b69454570
commit
270978492c
@ -28,8 +28,8 @@
|
|||||||
* when reading HTTP headers, the proxy needs some spare space to add or rewrite
|
* when reading HTTP headers, the proxy needs some spare space to add or rewrite
|
||||||
* headers if needed. The size of this spare is defined with MAXREWRITE. So it
|
* headers if needed. The size of this spare is defined with MAXREWRITE. So it
|
||||||
* is not possible to process headers longer than BUFSIZE-MAXREWRITE bytes. By
|
* is not possible to process headers longer than BUFSIZE-MAXREWRITE bytes. By
|
||||||
* default, BUFSIZE=16384 bytes and MAXREWRITE=BUFSIZE/2, so the maximum length
|
* default, BUFSIZE=16384 bytes and MAXREWRITE=min(1024,BUFSIZE/2), so the
|
||||||
* of headers accepted is 8192 bytes, which is in line with Apache's limits.
|
* maximum length of headers accepted is 15360 bytes.
|
||||||
*/
|
*/
|
||||||
#ifndef BUFSIZE
|
#ifndef BUFSIZE
|
||||||
#define BUFSIZE 16384
|
#define BUFSIZE 16384
|
||||||
@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
// reserved buffer space for header rewriting
|
// reserved buffer space for header rewriting
|
||||||
#ifndef MAXREWRITE
|
#ifndef MAXREWRITE
|
||||||
#define MAXREWRITE (BUFSIZE / 2)
|
#define MAXREWRITE 1024
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef REQURI_LEN
|
#ifndef REQURI_LEN
|
||||||
|
@ -833,8 +833,6 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
|
|||||||
err_code |= ERR_ALERT | ERR_FATAL;
|
err_code |= ERR_ALERT | ERR_FATAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (global.tune.maxrewrite >= global.tune.bufsize / 2)
|
|
||||||
global.tune.maxrewrite = global.tune.bufsize / 2;
|
|
||||||
chunk_init(&trash, realloc(trash.str, global.tune.bufsize), global.tune.bufsize);
|
chunk_init(&trash, realloc(trash.str, global.tune.bufsize), global.tune.bufsize);
|
||||||
alloc_trash_buffers(global.tune.bufsize);
|
alloc_trash_buffers(global.tune.bufsize);
|
||||||
}
|
}
|
||||||
@ -847,8 +845,11 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
global.tune.maxrewrite = atol(args[1]);
|
global.tune.maxrewrite = atol(args[1]);
|
||||||
if (global.tune.maxrewrite >= global.tune.bufsize / 2)
|
if (global.tune.maxrewrite < 0) {
|
||||||
global.tune.maxrewrite = global.tune.bufsize / 2;
|
Alert("parsing [%s:%d] : '%s' expects a positive integer argument.\n", file, linenum, args[0]);
|
||||||
|
err_code |= ERR_ALERT | ERR_FATAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(args[0], "tune.idletimer")) {
|
else if (!strcmp(args[0], "tune.idletimer")) {
|
||||||
unsigned int idle;
|
unsigned int idle;
|
||||||
|
@ -150,7 +150,7 @@ struct global global = {
|
|||||||
},
|
},
|
||||||
.tune = {
|
.tune = {
|
||||||
.bufsize = BUFSIZE,
|
.bufsize = BUFSIZE,
|
||||||
.maxrewrite = MAXREWRITE,
|
.maxrewrite = -1,
|
||||||
.chksize = BUFSIZE,
|
.chksize = BUFSIZE,
|
||||||
.reserved_bufs = RESERVED_BUFS,
|
.reserved_bufs = RESERVED_BUFS,
|
||||||
.pattern_cache = DEFAULT_PAT_LRU_SIZE,
|
.pattern_cache = DEFAULT_PAT_LRU_SIZE,
|
||||||
@ -1018,6 +1018,9 @@ void init(int argc, char **argv)
|
|||||||
if (global.tune.recv_enough == 0)
|
if (global.tune.recv_enough == 0)
|
||||||
global.tune.recv_enough = MIN_RECV_AT_ONCE_ENOUGH;
|
global.tune.recv_enough = MIN_RECV_AT_ONCE_ENOUGH;
|
||||||
|
|
||||||
|
if (global.tune.maxrewrite < 0)
|
||||||
|
global.tune.maxrewrite = MAXREWRITE;
|
||||||
|
|
||||||
if (global.tune.maxrewrite >= global.tune.bufsize / 2)
|
if (global.tune.maxrewrite >= global.tune.bufsize / 2)
|
||||||
global.tune.maxrewrite = global.tune.bufsize / 2;
|
global.tune.maxrewrite = global.tune.bufsize / 2;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user