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