Upstream split a header in FastCGI

Andrey N. Oktyabrski ano at antora.ru
Fri Mar 17 13:10:24 MSK 2006


А какой результат имело это обсуждение? Дело в том, что мне nginx-0.3.33 
даёт такую ошибку в логах:
2006/03/17 12:58:10 [alert] 65341#0: *277066 upstream split a header 
line in FastCGI records while reading response header from upstream, 
client: 1.2.3.4, server: xxx.ru, URL: "/inlinemod.php", upstream: 
"fastcgi://10.1.1.5:12000", host: "xxx.ru", referrer: 
"http://xxx.ru/inlinemod.php"

Схема работы - nginx + php-fcgi на двух машинках.

Igor Sysoev wrote:
> On Sat, 18 Feb 2006, Igor Sysoev wrote:
> 
>> On Sat, 18 Feb 2006, Grigory Batalov wrote:
>>
>>> On Fri, 17 Feb 2006 19:47:51 +0300 (MSK)
>>> Igor Sysoev <is-G97k7egY2jIKNkxEY4oc4w at public.gmane.org> wrote:
>>>
>>>>> 2006/02/17 18:57:51 [alert] 15689#0: *46 upstream split a header in 
>>>>> FastCGI records while reading response header from upstream, 
>>>>> client: 127.0.0.1, server: localhost, URL: "/trac/", upstream: 
>>>>> "fastcgi://127.0.0.1:1027"
>>> ...
>>>> Это сообщение означает, что fastcgi сервер послал запись stderr
>>>> в то время, пока ещё не до конца выведен заголовок ответа (он выводится
>>>> в записях stdout). Хотя, судя по логу, записей (type = 7) stderr нет.
>>>>
>>>> Такая обработка stderr во время чтения заголовка - это багофича 
>>>> nginx'а.
>>>> Однако в данном случае, похоже, stderr нет.
>>>>
>>>> Можно сделать следующее:
>>>>
>>>> 1) в файле src/http/modules/ngx_http_fastcgi_module.c найти две строки
>>>>     "upstream split a header in FastCGI records" и поменять в них
>>>>     split на split1 и split2.
>>>>
>>>> 2) запустить nginx с отладочныи логом (желательно поставить
>>>>     worker_processes 1), сделать запрос и лог прислать мне.
>>>
>>
>>>  А вот это он пишет при запуске в консоли:
>>>
>>> $ /usr/share/trac/cgi-bin/trac.fcgi
>>> Status: 200
>>> Cache-control: must-revalidate
>>> Expires: Fri, 01 Jan 1999 00:00:00 GMT
>>> Content-Type: text/html;charset=utf-8
>>> Content-Length: 196
>>
>> Он выводит каждый заголовок в стдельной записи, из-за этого и
>> были проблемы. Прилагаемый патч должен исправить ошибку.
>> Патчится как раз то место, где стоит split2. Было бы неплохо увидить
>> вывод и отладочный лог с этим патчем.
> 
> Это патч нужно откатить и применить новый.
> 
> 
> Игорь Сысоев
> http://sysoev.ru
> 
> 
> ------------------------------------------------------------------------
> 
> --- src/http/modules/ngx_http_fastcgi_module.c	Mon Nov 28 15:45:01 2005
> +++ src/http/modules/ngx_http_fastcgi_module.c	Sat Feb 18 22:54:51 2006
> @@ -878,7 +878,7 @@
>  
>              if (f->header) {
>                  ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
> -                              "upstream split a header in FastCGI records");
> +                             "upstream split a header line in FastCGI records");
>  
>                  return NGX_HTTP_UPSTREAM_INVALID_HEADER;
>              }
> @@ -991,7 +991,13 @@
>                                 "http fastcgi header: \"%V: %V\"",
>                                 &h->key, &h->value);
>  
> -                continue;
> +                if (u->buffer.pos < u->buffer.last) {
> +                    continue;
> +                }
> +
> +                /* the end of the FastCGI record */
> +
> +                break;
>              }
>  
>              if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
> @@ -1051,7 +1057,7 @@
>              }
>  
>              ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
> -                          "upstream split a header in FastCGI records");
> +                          "upstream split a header line in FastCGI records");
>  
>              return NGX_HTTP_UPSTREAM_INVALID_HEADER;
>          }






More information about the nginx-ru mailing list