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