0.6.30 @ linux amd64 & fcgi

Sergey Serov mpa at corg.net
Thu May 8 10:46:26 MSD 2008


On Wednesday 07 May 2008, Igor Sysoev wrote:
> On Wed, May 07, 2008 at 10:33:52PM +0400, Igor Sysoev wrote:
> > On Wed, May 07, 2008 at 05:12:58PM +0000, Sergey Serov wrote:
> > > Откат в версии 0.5.27 файла src/http/modules/ngx_http_fastcgi_module.c
> > > до версии 0.2.26 проблему решает. Изменениний на первый взгляд там
> > > минимум:
> >
> > А если попробовать прилагаемый патч для 0.5.27 ?
>
> Вернее:
>
> -        if (rc == NGX_OK) {
> +        if (rc == NGX_OK && u->buffer.pos == u->buffer.last) {
>

Про 0.5.27 см. другой пост.

В 0.6.30 после этого патча

2008/05/08 04:59:49 [debug] 25976#0: *7 http fastcgi header: "Status: 200"
2008/05/08 04:59:49 [debug] 25976#0: *7 http fastcgi parser: 0
2008/05/08 04:59:49 [debug] 25976#0: *7 http fastcgi header: "X-Catalyst: 5.7006"
2008/05/08 04:59:49 [debug] 25976#0: *7 upstream split a header line in FastCGI records
2008/05/08 04:59:49 [debug] 25976#0: *7 http upstream dummy handler
2008/05/08 04:59:51 [debug] 25976#0: *7 http upstream process header
2008/05/08 04:59:51 [debug] 25976#0: *7 recv: fd:22 -1 of 0
2008/05/08 04:59:51 [alert] 25976#0: *7 recv() failed (95: Operation not supported) while reading response header from upstream, 
client: 125.24.35.220, server: dev.example.net, request: "GET /users/affiliates HTTP/1.1", 
upstream: "fastcgi://unix:/tmp/example_dev.sock:", host: "dev.example.net", referrer:        "http://dev.example.net/users/uploaded"

Если upstream был TCP, то сообщение вместо recv будет уже о таймауте. Но смысл не меняется.
Если в это время посмотреть в это время strace fcgi сервера, то видно что он сперва делает write всех заголовков, делает write 
перевода стркои и уже потом начинает писать собственно конент.

Я убрал опработку splitted headers и вроде бы все заработало как надо. См. патч.
Этот мой патч чем нибудь чреват практически? Не совсем уверен в том, что именно я сделал.


--- nginx-0.6.30.orig/src/http/modules/ngx_http_fastcgi_module.c
+++ nginx-0.6.30/src/http/modules/ngx_http_fastcgi_module.c
@@ -1231,29 +1231,14 @@
             return NGX_OK;
         }

-        if (rc == NGX_OK) {
+       if (rc == NGX_OK && u->buffer.pos == u->buffer.last) {
             return NGX_AGAIN;
         }

         /* rc == NGX_AGAIN */
-
         ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                        "upstream split a header line in FastCGI records");

-        if (f->split_parts == NULL) {
-            f->split_parts = ngx_array_create(r->pool, 1,
-                                        sizeof(ngx_http_fastcgi_split_part_t));
-            if (f->split_parts == NULL) {
-                return NGX_ERROR;
-            }
-        }
-
-        part = ngx_array_push(f->split_parts);
-
-        part->start = part_start;
-        part->end = u->buffer.last;
-
-        return NGX_AGAIN;
     }
 }









More information about the nginx-ru mailing list