Hello! On Fri, Jun 22, 2018 at 11:25:00AM -0400, nickolay wrote:
> Всех приветствую! > > Есть простой perl-модуль, который работает под nginx без проблем на древних > версиях (кажется до 1.7), а на свежих версиях nginx этот модуль приводит к > тому, что воркеры начинают падать в корку по SIGSEGV. > Разобрал модуль до мелочей и нашёл, что всё падает на send_http_header(). > Вот пример этого модуля: > > package post_download; > > use nginx; > use strict; > > sub handler { > my $r = shift; > > $r->send_http_header("text/plain"); > $r->print("OK\n"); > > return OK; > } > > Воркеры падают не на каждый такой запрос, а после нескольких таких > запросов. > > Подключается этот модуль обычным способом: > perl_require /etc/nginx/perl/post_download.pm; > > 100% баг наблюдается на двух версиях: 1.12.2 и на 1.15.0. Добавил в конце модуля "1;" (без этого он не может быть загружен, потому что "did not return a true value" (c) perl), включил обработку через post_download::handler с помощью location / { perl post_download::handler; } Прогнал миллион запросов - ничего не падает. Скорее всего у вас имеет место быть какая-то проблема со сборкой. Смотрите внимательно, как собирался nginx, правильный ли перл и библиотеки используются при сборке, совпадает ли компилятор, которым собирался перл, с тем, которым собирается nginx. Кроме того, стоит проверить, что perl-модуль nginx собран из тех же исходников, что и собственно nginx, и при сборке не применялись какие-либо патчи. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru