Re: Воркер падает в корку по SIGSEGV (с примером)
Maxim Dounin
mdounin на mdounin.ru
Ср Июн 27 18:33:10 UTC 2018
Hello!
On Wed, Jun 27, 2018 at 07:32:18AM -0400, nickolay wrote:
> Стандартный дистрибутив Debian 9.4. Сам perl, компилятор и всё остальное
> штатное. Никаких патчей не накатывал. Повторяется стабильно на разных
> машинах Debian 9.3 и Debian 9.4.
Откуда и как собирался/ставился nginx? Было ли это единоразовое
действие, или nginx пересобирался/переставлялся с другими опциями?
Подобное поведение наиболее вероятно, если perl-модуль nginx
(nginx.so) собран не с теми опциями, что сам nginx, и
соответственно предполагает неправильное о структурах данных
nginx'а, с которыми работает, в частности - о структуре запроса.
Чистый Debian 9 я вот прямо сейчас поднял в виртуалке, и с nginx
из стандартных пакетов (1.10.3) никаких проблем не наблюдается,
равно как и со свежесобранным из исходников 1.15.0.
> Но я нашёл причину падения и она связана с disable_not_modified. Вот такой
> патч устраняет падение в корку:
>
> --- ../nginx-1.15.0/src/http/modules/ngx_http_not_modified_filter_module.c
> 2018-06-05 16:47:25.000000000 +0300
> +++ src/http/modules/ngx_http_not_modified_filter_module.c 2018-06-25
> 01:25:22.299577899 +0300
> @@ -54,6 +54,7 @@
> static ngx_int_t
> ngx_http_not_modified_header_filter(ngx_http_request_t *r)
> {
> + r->disable_not_modified = 1;
> if (r->headers_out.status != NGX_HTTP_OK
> || r != r->main
> || r->disable_not_modified)
Это - совершенно точно не причина. Вы таким образом просто
отключаете not_modified фильтр, что, вероятно, позволяет не
наступать на повреждённые из-за несоответствия структур данные.
Где и при каких обстоятельствах оно на них таки наступит - никто
не знает.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru