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