Maxim Dounin пишет:
Hello!
On Sun, Oct 18, 2009 at 02:13:40AM +0300, Станислав wrote:
[...]
в еррор логе выдается такое:
2009/10/18 03:01:03 [warn] 28243#0: *11692 delaying request, excess:
0.118, by zone "qraagarphp", client: 94.244.156.213, server:
xxxxx.xx, request: "GET
/forum/style.php?sid=ba7bb6c7f099ea2536f223af61b66790&id=1&lang=
en HTTP/1.1", host: "xxxxx.xx", referrer:
[2]"http://xxxxx.xx/forum/index.php?"
2009/10/18 03:01:03 [warn] 28243#0: *11692 an upstream response is
buffered to a temporary file
/var/spool/nginx/fastcgi_temp/0000000020 while reading upstream,
client: 94.244.156.213, server: xxxxx.xx, request: "GET
/forum/style.php?sid=ba7bb6c7f099ea2536f223af61b66790&id=1&lang=
en HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:",
host: "xxxxx.xx", referrer:
[3]"http://xxxxx.xx/forum/index.php?"
2009/10/18 03:01:03 [info] 28243#0: *11692 client timed out (110:
Connection timed out) while sending to client, client:
94.244.156.213, server: xxxxx.xx, request: "GET
/forum/style.php?sid=ba7bb6c7f099ea2536f223af61b66790&id=1&lang=
en HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:",
host: "xxxxx.xx", referrer:
[4]"http://xxxxx.xx/forum/index.php?"
[...]
Спасти эту ситуацию удалось прибавив nodaley к limit_req
zone=qraagarphp burst=1
Но это, мне кажется, не выход, т.к. ддосить будут(
nginx/0.7.61 + php-fpm
В 0.7.61 limit_req с задержкой не работает, если ответ не
помещается целиком в буфер сокета. В 0.8.* уже есть фикс:
Changes with nginx 0.8.5:
....
*) Bugfix: in ngx_http_limit_req_module.
....
Либо использовать limit_req ... nodelay, либо накладывать патч
руками.
Maxim Dounin
Спасибо огромное за ответ=)
Патчик наложить вот этот?
line diff
1.1 --- a/src/http/modules/ngx_http_limit_req_module.c Tue Jun
02 00:00:00 2009 +0400
1.2 +++ b/src/http/modules/ngx_http_limit_req_module.c Mon Jul
13 00:00:00 2009 +0400
1.3 @@ -181,7 +181,7 @@
1.4 }
1.5
1.6 ngx_log_debug3(NGX_LOG_DEBUG_HTTP,
r->connection->log, 0,
1.7 - "limit_req: %i %ui.%03ui", rc, excess /
1000, excess % 1000);
1.8 + "limit_req: %i %ui.%03ui", rc, excess /
1000, excess % 1000);
1.9
1.10 if (rc == NGX_BUSY) {
1.11 ngx_shmtx_unlock(&ctx->shpool->mutex);
1.12 @@ -263,8 +263,23 @@
1.13 static void
1.14 ngx_http_limit_req_delay(ngx_http_request_t *r)
1.15 {
1.16 + ngx_event_t *wev;
1.17 +
1.18 ngx_log_debug0(NGX_LOG_DEBUG_HTTP,
r->connection->log, 0,
1.19 - "limit_req delay");
1.20 + "limit_req delay");
1.21 +
1.22 + wev = r->connection->write;
1.23 +
1.24 + if (!wev->timedout) {
1.25 +
1.26 + if (ngx_handle_write_event(wev, 0) != NGX_OK) {
1.27 + ngx_http_finalize_request(r,
NGX_HTTP_INTERNAL_SERVER_ERROR);
1.28 + }
1.29 +
1.30 + return;
1.31 + }
1.32 +
1.33 + wev->timedout = 0;
1.34
1.35 if (ngx_handle_read_event(r->connection->read, 0)
!= NGX_OK) {
1.36 ngx_http_finalize_request(r,
NGX_HTTP_INTERNAL_SERVER_ERROR);
|